jQuery()重复绑定解决方案介绍
查询中使用Live()的方法今天,当你编写一个代码时,你就有问题了。
$(函数(){())
$()。
无功task_name =美元(这)文本();
$(#选择TBODY)。追加(+ task_name + );
});
});
$()文件来自后台,单击绝对不是,(绑定)也不能获得动态添加的元素。它只能用(活),但使用活()的问题是添加两个表公会相当莫名其妙,即绑定事件重复,纠结一个上午终于找到原因,看看活()方法介绍。
生存(类型,{数据},FN)
总结
jQuery将一个事件处理函数添加到所有匹配的元素中,即使后面添加了元素。
这种方法是最基本的一个变种。Bind()(),method.when.bind使用选择器匹配连接到一个事件处理函数的元素,和元素,添加后不会有。你需要使用。Bind()一次。例如
请点击这里
您可以将一个简单的单击事件绑定到该元素:
$('。clickme)。Bind(听到咔哒声,函数()){
警报(绑定处理程序调用);
});
单击元素时,弹出一个警告框。
然后,想象一下在这个之后添加另一个元素。
$('body)。追加(还有一只目标);
虽然这个新的元素可以匹配的选择。clickme
Live()提供了一种对应这种情况的方法:
$('。clickme)。活(听到咔哒声,函数()){
警报(实时处理程序调用);
});
然后添加一个新元素:
$('body)。追加('anothertarget);
然后单击新元素,他仍然可以触发事件处理函数。
事件委托
对于未添加到DOM中的元素来说,Live()方法是有效的,因为它使用事件委托:在祖先元素上绑定的事件处理程序可以响应后代触发的事件。
将传递给Live()的事件处理程序不绑定到元素,而是将其作为一个特殊的事件处理函数,并绑定到DOM树的根节点:
1,生成一个单击事件交付处理
2,因为没有事件处理函数直接绑定起来,所以事件会冒泡到DOM树上。
3,事件不断冒泡到DOM树的根节点,默认情况下绑定到这个特殊事件处理程序。
4,执行一个特殊的点击事件处理函数。
5,这个事件处理函数的第一检测事件对象的目标来确定是否需要继续。这个测试是通过检测是否完成美元(事件。目标)。最近('。clickme)可以找到匹配的元素。
6,如果找到匹配的元素,则调用原始事件处理函数。
因为测试仅在事件发生时的第五个步骤中完成,所以随时添加的元素都可以响应事件。
附加说明
但是,由于它的特殊实现,所以不能简单地替换Bind(),主要的区别是:
在jQuery 1.4,活的。()方法支持自定义事件和支持所有Javascript事件,jQuery 1.4.1,焦点和蓝色的事件甚至是支持(映射到更合适,可以泡聚集和focusout)。
此外,在jquery1.4.1,悬停也可以支持(映射到MouseEnter MouseLeave)。然而,在jquery1.3。X,只支持Javascript的事件和自定义事件的支持:单击,双击,keydown,按键,Keyup,MouseDown,MouseMove,mouseout,mouseover和mouseout。
Live()不完全支持通过DOM遍历方法发现的元素。相反,在前面的示例中提到,应该始终直接使用选择器后面的Live()方法。
当一个事件处理函数绑定。活(),停止执行其他的事件处理函数,该函数必须返回false。唯一的要求to.stoppropagation()不能实现。
更多关于事件绑定的信息可以通过参考绑定()方法获得。
在jQuery 1.4.1,可以绑定多个事件()。生活在一个时间,类似于由Bind()的功能。
在jQuery 1.4中,可以使用数据参数将附加信息传递给事件处理函数。很好地利用了闭包所带来的问题。可以从Bind()的讨论中获得更多的信息。
参数
typestring事件类型
数据(可选)事件处理函数绑定到对象
FN函数希望绑定的事件处理函数
样品
HTML代码:
clickme!
jQuery代码:
$(p)。
$(这)后(anotherparagraph!);
});
描述:
防止默认事件行为和事件气泡,返回false
jQuery代码:
$( )。
根本原因是,在需要防止默认行为和事件冒泡时,在后面的代码中添加false;
描述:
只防止默认事件行为
jQuery代码:
$( )。
Event.preventDefault();
});