首页 > 解决方案 > 如何只在元素集合上注册一次点击事件?

问题描述

如何只在元素集合上注册一次点击事件?

$(".UFIReplyLink").on("click", function() {
    alert('bound once')
});

单个对象的一些选项已在此处此处记录,但我想在集合上进行

我试过使用.one没有运气

var collectLinks = function() {
  $(".UFIReplyLink").one("click", function() {
    console.log('one...') // this will log however many seconds have passed
  });
}
setInterval(collectLinks, 1000)

标签: javascriptjquery

解决方案


您可以使用事件委托,其中事件附加到父元素并指定选择器以在子元素上执行事件。如果子元素是动态插入的,它也会执行事件。

请参阅这篇不错的文章以了解 Javascript 中解释的事件委托。

function addEvent()
{
    $("#main").off("click").delegate("span", "click", function(event) {
          console.log($(event.target).html())
    });
}

setInterval(addEvent,1000)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="main">
    <span class="UFIReplyLink"> ELEMENT 1 </span>
    <br>
    <span class="UFIReplyLink"> ELEMENT 2 </span>
    <br>
    <span class="UFIReplyLink"> ELEMENT 3 </span>
    <br>
    <span class="UFIReplyLink"> ELEMENT 4 </span>
</div>


推荐阅读