我将假设您希望事件仅在PER匹配元素时触发,而不是在第一次单击时完全取消绑定.
我会像这样实现它:
$('#container').delegate('.children', 'click', function() {
if($(this).data('clicked')) {
return;
}
// ... your code here ...
$(this).data('clicked', true);
});
Run Code Online (Sandbox Code Playgroud)
每个元素只会触发一次.从技术上讲,它每次都会触发,但在第一次单击时会被标记,因此代码不会再次执行.
模拟.one()处理程序w/delegate的固有问题是使用.one()在选择器中匹配的每个元素都绑定了自己的事件处理程序.因此,当它第一次被触发时,它会解除/删除该元素的处理程序.你不能用.delegate()做到这一点,因为只有一个SINGLE处理程序被用于所有匹配的元素.
虽然上面的代码完美地模拟了它,但它仍然有点hackish,因为它实际上并没有像.one()那样做(取消绑定事件处理程序).