jQuery将更改事件绑定到几个DIV's,但已选定
jQuery bind change event to all children in several DIV's except selected
我有一个3个div的监听器,其中包含几个表单元素:
<div id="div-a">
<input type="text" id="txt-a"/>
<!-- more elements here -->
...
</div>
<div id="div-b">
<input type="text" id="txt-b"/>
<input type="text" id="txt-c"/>
<!-- more elements here -->
...
</div>
<div id="div-c">
<input type="text" id="txt-d"/>
<input type="text" id="txt-e"/>
<input type="text" id="txt-f"/>
<!-- more elements here -->
...
</div>
我将3个DIV的更改事件绑定如下:
$("#div-a, #div-b, #div-c").change(function(){
// do something, except if the change happened to txt-b and txt-c
})
以上内容从它们各自的子元素中侦听变化。它运行良好,但等式中还缺少一件事。txt-b和txt-c更改事件不在我的业务范围内。因此,我决不能将它们包含在变更事件侦听器正在执行的操作中。此外,3个DIV下的每个元素都已经有了自己的侦听器来进行更改,因此将侦听器添加到元素的每个更改事件是最后一个选项。
除了一些例外,我需要听取三个DIV的子元素的变化。当除5种输入类型外,三个DIV的子元素发生变化时,我需要执行一个函数。
到目前为止,我做了以下没有工作:
我尝试分离三个DIV,并添加了:not()选择器
$("#div-b:not(#txt-b)").change(function(){//。。。});
使用.not()
我想知道解决这个问题的最佳方法。如果您需要,我很乐意添加更多信息。谢谢。
您可以尝试检查目标的id,然后忽略它们:
$("#div-a, #div-b, #div-c").change(function(e) {
var target = e.target;
if (target.id === "txt-b" || target.id === "txt-c") {
return;
}
//Is not a txt-b or a txt-c
})
http://jsfiddle.net/HGXDT/4/
您只需使用$(this)
变量即可。
假设事件是由input
标签生成的,您只需要检查
if(!$(this).parent().attr('id')=='div-b')
如果只有txt-b和txt-c将在div-b内。
否则你可以选择
if($(this).attr('id')!='div-b') && !$(this).attr('id')!='div-b'))
不建议使用not选择器,但如果您想使用:not选择器本身,请尝试单独使用子元素的$("div").children("input :not(#txt-b)").change(function(){ //... });
方法,而不是父元素组合父元素和子元素
您可以使用一个处理程序来完成此操作。。
<div id="controls-wrapper">
<!--Wrap all your controls and div's here -->
</div>
然后。。
$('#controls-wrapper').delegate('input', 'change', function(e){
if($(this).parent().is('#div-a')){
//this input was in #div-a, do something
}
// and so on, as your case might need
});
注意:您也可以使用.on()
来代替.delegate()
- 操作员”;新的“;根据我想在几个JavaScript文件中使用的类,在JavaScript中使用
- 可以't将几个数字设置为<输入类型=“;数字“>
- 当加载几个js文件时,defer属性应该如何工作
- 使用几个<脚本>标签不会't工作-只调用一个脚本
- 如何从数组中删除几个相同的项
- 包括php文件和几个js文件
- 在几个元素上模拟onclick事件
- 如何更改与Backbone集合中的模型相关联的几个元素的css属性
- 如何在几个jQuery对象上调用jQuery函数
- 用PHP/MMySQL和JavaScript填充几个HTML分区
- 点击几个按钮后动态网站更改
- d3日历视图:如何将所有内容放在一个svg中,而不是放在几个svg中
- 在JavaScriptES6中,如何从散列中只获取几个属性
- 多个 $(document).ready(function() 但只有前几个被解雇
- 几个用于布线的角度模块
- jQuery将更改事件绑定到几个DIV's,但已选定
- 如何在没有几个DIV内部的情况下获得DIV的内部HTML
- 使用jQuery检索几个DIV的ID并存储在一个数组中
- 用表单(选择选项)和JavaScript更改几个DIV类
- 从DIV JavaScript中的几个元素更改ID和NAME