有没有办法one()
与事件委托一起使用?喜欢on()
或live()
以便将其应用于未在绑定时创建的 DOM 元素?
问问题
87 次
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 回答