如何在jQuery中将事件附加到将来创建的元素中,只有一次?
我知道.live()可以为将来创建的元素附加事件,但会像.bind()那样多次附加事件。但我只需要将事件附加一次。
示例:
对于我的案例
http://jsfiddle.net/ppTqp/1/ - >应该只提醒一次“直播测试”。使用.live方法,它会发出两次警告。
答案 0 :(得分:4)
<强>更新强>
显然,当您对live
,delegate
或on
进行多次调用时,您希望事件处理程序仅绑定一次。
在这种情况下,您必须首先取消绑定事件处理程序。您可以使用名称空间仅取消绑定特定事件处理程序:
$(document).off('click.namespace').on('click.namespace', selector, function() {
});
如果是live
,您必须致电die
:
$(...).die('click').live(...)
我假设事件处理程序绑定了几个元素。由于live
,delegate
或on
(就此而言)的性质,您不能仅仅为一个元素执行事件处理程序时“取消绑定”,因为它不会被解雇任何其他元素了。相反,你必须跟踪它被触发的元素。
示例:
$(document).on('click', selector, function() {
if(!$(this).data('fired')) {
$(this).data('fired', true);
// do your stuff
}
});
另一个解决方案是使用.one()
并在创建新元素时绑定事件处理程序。
关于您的术语:
您不能附加活动,而是活动处理程序。 bind
不会多次附加事件或事件处理程序,只会绑定一次,但一旦绑定,它将始终触发某个事件。如果您希望仅调用一次事件处理程序,则必须在调用它之后取消绑定它。
答案 1 :(得分:0)
你可以这样做:
$("#foo").one("click", function() { alert("This will be displayed only once."); });
每个元素最多执行一次