Joh*_*ler 8

我将假设您希望事件仅在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()那样做(取消绑定事件处理程序).