如何将事件附加到将来在jQuery中创建的元素(仅一次)?
我知道.live()可以为将来创建的元素附加事件,但是会像.bind()一样多次附加事件。但我只需要附上一次。
示例:
为我的案子
http://jsfiddle.net/ppTqp/1/ ->应该只提醒“从测试中存活”一次。使用.live方法,它会发出两次警报。
发布于 2011-11-13 05:00:28
更新:
显然,当您多次调用live
、delegate
或on
时,您希望事件处理程序只绑定一次。
在这种情况下,您必须首先解除事件处理程序的绑定。您可以使用命名空间仅解除特定事件处理程序的绑定:
$(document).off('click.namespace').on('click.namespace', selector, function() {
});
如果是live
,您必须调用die
$(...).die('click').live(...)
我假设事件处理程序绑定到几个元素。由于live
、delegate
或on
(就这一点而言)的性质,您不能在为一个元素执行事件处理程序时“解除绑定”,因为它不会再为任何其他元素触发。相反,uou必须跟踪它被触发的元素。
示例:
$(document).on('click', selector, function() {
if(!$(this).data('fired')) {
$(this).data('fired', true);
// do your stuff
}
});
另一种解决方案是在创建新元素时使用.one()
并绑定事件处理程序。
关于你的术语:
不能附加事件,但不能附加事件处理程序。bind
不多次附加事件或事件处理程序,只附加一次,但是一旦绑定,它将始终为某个事件触发。如果希望只调用一次事件处理程序,则必须在调用事件处理程序之后解除绑定。
https://stackoverflow.com/questions/8111648
复制相似问题