4

有没有办法one()与事件委托一起使用?喜欢on()live()以便将其应用于未在绑定时创建的 DOM 元素?

4

3 回答 3

4

就在这里:

// added in jQuery 1.7
// .one( events [, selector] [, data], handler(eventObject) )
$("div").one("click", "span", function (e) {
   $(this).hide(); 
});
于 2012-05-08T14:42:11.910 回答
1

完全一样的方式.on

$("#to-bind-to").one('event-type', 'delegated-selector', eventFunction);
于 2012-05-08T14:42:42.883 回答
1

是的。来自jQuery.one()文档

jQuery 1.7 中引入的后两种形式与 .on() 相同,只是在委托元素第一次发生事件后删除了处理程序,无论选择器是否匹配任何内容。例如:

    $("#foo").one("click", function() {
      alert("This will be displayed only once.");
    });
    $("body").one("click", "#foo", function() {
      alert("This displays if #foo is the first thing clicked in the body.");
    });

代码执行后,单击 ID 为 foo 的元素将显示警报。随后的点击将无济于事。

这意味着,当您使用表单$(el).one('click', '.selector', handler)时,它将像live- 绑定事件处理程序el(必须存在于 DOM 中)但事件处理程序将仅在单击时执行.selector,无论该元素是否在您的打电话给.one().

编辑:似乎 jQuery 的文档是错误的——至少,我解释它的方式是错误的。根据alert以上,

“如果 #foo 是在正文中单击的第一件事,则会显示。”

这让我觉得如果首先在正文中单击其他任何内容,事件处理程序将被删除并且不会再次触发。情况并非如此——事件处理程序将一直存在,直到#foo被单击一次。

请参阅this fiddle进行演示。

于 2012-05-08T14:45:53.303 回答