最佳答案
我假设您希望事件仅在每个匹配元素上触发一次,而不是在第一次单击时完全取消绑定(bind)。
我会像这样实现它:
$('#container').delegate('.children', 'click', function() {
if($(this).data('clicked')) {
return;
}
// ... your code here ...
$(this).data('clicked', true);
});
每个元素只会触发一次。从技术上讲,它每次都会触发,但在第一次单击时会被标记,因此代码不会再次执行。
使用委托(delegate)模拟 .one() 处理程序的固有问题是,使用 .one() 选择器中匹配的每个元素都会绑定(bind)其自己的事件处理程序。因此,当第一次触发它时,它会从该元素中解除绑定(bind)/删除处理程序。您不能使用 .delegate() 执行此操作,因为只有一个处理程序用于所有匹配的元素。
虽然上面的代码完美地模拟了它,但它仍然有点hackish,因为它实际上并没有执行与 .one() 相同的操作(解除绑定(bind)事件处理程序)。
关于javascript - 有什么方法可以在 jQuery 中委托(delegate)事件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6873019/