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

问题描述 投票:0回答:4

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

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

单个对象的一些选项已被记录为herehere,但我想在集合中进行

我尝试过使用.one没有运气

var collectLinks = function() {
  $(".UFIReplyLink").one("click", function() {
    console.log('one...') // this will log however many seconds have passed
  });
}
setInterval(collectLinks, 1000)
javascript jquery
4个回答
0
投票

.one():将处理程序附加到元素的事件。每个事件类型的每个元素最多执行一次处理程序。

您可以使用one()事件,如:

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

$(".UFIReplyLink").one("click", function() {
  alert('bound once')
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<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>

0
投票

如果单击按钮时附加类名怎么样?这样您就可以检查元素上是否存在类名。

$(".btn").click(function(){
  if ($(".my_item").hasClass("clicked")) {
    console.log("Already clicked me before!");
  } else {
    $(".my_item").addClass("clicked");
    $(".my_item").text("Clicked! Try clicking me again...");
  }
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="btn">Click Me!</button>
<button class="btn">Click Me!</button>
<button class="btn">Click Me!</button>
<div class="my_item">I have never been clicked...</div>

0
投票

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

Refer this nice article知道在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>

-1
投票

您可以像.unbind一样使用$(this).unbind("click");来阻止单击事件触发您单击的按钮:

$(".UFIReplyLink").on("click", function() {
    alert('bound once');
    $(this).unbind("click");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="UFIReplyLink">Button1</button>
<button class="UFIReplyLink">Button2</button>
<button class="UFIReplyLink">Button3</button>
© www.soinside.com 2019 - 2024. All rights reserved.