我想有一个事件处理程序只执行一次,然后从绑定到的所有元素解除绑定。jquery事件处理程序只执行一次绑定到多个元素
我知道.one()
,但是在使用它时“处理程序每个元素最多执行一次”。
是否有一种“内置”方式将事件处理程序绑定到多个元素,并在它们中的任何一个上执行后自动从所有元素中移除它?
我想有一个事件处理程序只执行一次,然后从绑定到的所有元素解除绑定。jquery事件处理程序只执行一次绑定到多个元素
我知道.one()
,但是在使用它时“处理程序每个元素最多执行一次”。
是否有一种“内置”方式将事件处理程序绑定到多个元素,并在它们中的任何一个上执行后自动从所有元素中移除它?
miguel camba已经告诉你检查维基解除绑定。正确的解决方案如下:
var handler = function() {
alert('I appear only one time');
$('p').unbind('click', handler);
}
$('p').bind('click', handler);
这将只从click事件中解除绑定此处理程序。
//编辑:
另一种解决办法是命名空间点击事件:
$('p').bind('click.myClickEvent', function() {
alert('I appear only one time');
$('p').unbind('click.myClickEvent');
});
工作这样势必导致在某些时候有些麻烦。 如果我将不得不手动执行此操作,我会编写一个.once(处理程序),它将同时保留指向“this”和处理程序的指针,并绑定另一个处理程序,该处理程序将仅删除它添加的处理程序。这只是我希望JQuery已经有这样的东西... – epeleg
在这种情况下,我不知道任何现有的jquery函数,就像那样。 这种方法对我来说似乎不是很容易出错,但实现一个附加第二个事件的jquery _fn.once()_函数可能会很复杂。您必须关注事件优先级,使用_stopPropagation_的事件可能不会被解除绑定....似乎更复杂的是只需在您的回调函数中添加一行。 –
接受为“我不知道任何现有的jquery函数,就像那样工作”... – epeleg