有没有办法在jQuery中委托事件一?

我想将事件委托给点击一个 。 有谁知道是否可以这样做?

我将假设您希望事件仅在PER匹配元素时触发,而不是在第一次单击时完全取消绑定。

我会像这样实现它:

$('#container').delegate('.children', 'click', function() { if($(this).data('clicked')) { return; } // ... your code here ... $(this).data('clicked', true); }); 

每个元素只会触发一次。 从技术上讲,它每次都会触发,但在第一次单击时会被标记,因此代码不会再次执行。

模拟.one()处理程序w / delegate的固有问题是使用.one()在选择器中匹配的每个元素都绑定了自己的事件处理程序。 因此,当它第一次被触发时,它会解除/删除该元素的处理程序。 你不能用.delegate()做到这一点,因为只有一个SINGLE处理程序被用于所有匹配的元素。

虽然上面的代码完美地模拟了它,但它仍然有点hackish,因为它实际上并没有像.one()那样做(取消绑定事件处理程序)。

由于这篇文章已有几年历史,我只想为更多当代读者提供一个完整的更新示例(2015)。 逻辑与此处的其他答案没有什么不同,但是自2011年以来jQuery的方法已经发展。具体来说:

从jQuery 1.7开始,.delegate()已被.on()方法取代。
jQuery委托()

 // define output element var $output = $('div#output'); // attach delegated click handler $(document).on('click', 'button', function() { // define clicked element var $this=$(this); // if this element has already been clicked, abort if ($this.data('clicked')) { return false; } // perform click actions $output.append("clicked " + $this.html() + "
"); // mark this element as clicked $this.data('clicked',true); });
     

我确信有一种简洁的方法可以做到这一点,但一个简单的方法就是这样:

  

编辑:感谢下面的评论,我决定使用数据,现在这并没有将DOM全部用于w3c标准。