如何将事件(仅一次)附加到jQuery中将来创建的元素中?

时间:2011-11-13 12:54:32

标签: jquery

如何在jQuery中将事件附加到将来创建的元素中,只有一次?

我知道.live()可以为将来创建的元素附加事件,但会像.bind()那样多次附加事件。但我只需要将事件附加一次。

示例:

对于我的案例

http://jsfiddle.net/ppTqp/1/ - >应该只提醒一次“直播测试”。使用.live方法,它会发出两次警告。

2 个答案:

答案 0 :(得分:4)

<强>更新

显然,当您对livedelegateon进行多次调用时,您希望事件处理程序仅绑定一次。

在这种情况下,您必须首先取消绑定事件处理程序。您可以使用名称空间仅取消绑定特定事件处理程序:

$(document).off('click.namespace').on('click.namespace', selector, function() {

});

如果是live,您必须致电die

$(...).die('click').live(...)

我假设事件处理程序绑定了几个元素。由于livedelegateon(就此而言)的性质,您不能仅仅为一个元素执行事件处理程序时“取消绑定”,因为它不会被解雇任何其他元素了。相反,你必须跟踪它被触发的元素。

示例:

$(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.");
});

每个元素最多执行一次