jQuery .one()不会每个元素触发一次,但只触发一次

时间:2015-11-24 23:26:51

标签: jquery

我目前正在努力使用jQuery .one()。文档说明

  

每个事件类型的每个元素最多执行一次处理程序。

如果我有三个输入并像https://jsfiddle.net/rr49ryyo/那样执行$(document).one("click", "input", function () { ... }之类的操作,我希望如果我点击所有3个输入,该事件会被触发3次,但事实上,它只会被触发总共一次而不是每个元素一次。这是一个错误还是我做错了什么?

如果我通过.one附加处理程序,

$("input").one("click", function () { ... }的行为与预期一样,但我的问题是我需要响应动态添加的输入触发的事件。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

问题在于,当您使用$(document).one(...)时,它实际上在文档上设置了一个侦听器,当后代input元素是事件的目标时触发,并在被触发一次后被删除。 / p>

使用$('input').one(...),它会在每个输入元素上设置一个侦听器,每个输入元素在触发时都会被删除。

编辑:您可以通过查看@ Phil的评论链接Is there any way to delegate the event one in jQuery?

来解决这个问题

解决方案:

  

https://stackoverflow.com/a/6873265/1059070

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

  // ... your code here ...


  $(this).data('clicked', true);

});