简体   繁体   English

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

[英]How can you register a click event on a collection of elements only once?

How can you register a click event on a collection of elements only once? 如何仅在元素集合上注册一次click事件?

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

Some options on a single object have been documented here and here but I'd like to do it on a collection 单个对象的一些选项已在此处此处记录下来 ,但我想在一个集合上进行

I've tried using .one with no luck 我尝试使用.one没有运气

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

.one() : Attach a handler to an event for the elements. .one() :将处理程序附加到元素的事件。 The handler is executed at most once per element per event type. 每个事件类型的每个元素最多只能执行一次处理程序。

You could use the one() event like : 您可以使用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> 

How about attaching a class name whenever a button is clicked on? 如何在单击按钮时附加一个类名? So that you can check if the class name exists on the element. 这样就可以检查元素名称上是否存在类名称。

 $(".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> 

You can use the Event Delegation , where the event is attached to the parent element and the selector is specified to perform the event on the child elements. 您可以使用事件委托 ,其中将事件附加到父元素,并指定选择器以在子元素上执行事件。 It also performs the events if the child elements are inserted dynamically. 如果子元素是动态插入的,它也会执行事件。

Refer this nice article to know about the event delegation explained in Javascript. 请参阅这篇不错的文章,以了解有关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> 

You can use .unbind like so $(this).unbind("click"); 您可以像这样使用.unbind $(this).unbind("click"); to stop the click event from triggering on the button which you click on: 阻止点击事件触发您单击的按钮:

 $(".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> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM