Javascript 单击(函数()只在第一次单击时执行

Javascript 单击(函数()只在第一次单击时执行,javascript,jquery,click,addclass,removeclass,Javascript,Jquery,Click,Addclass,Removeclass,我试图执行给定的。仅在第一次单击时单击(function()),但它总是在单击时执行。 当点击时,它会工作。更多post按钮将类加载添加到。主ul和将更多post显示到。主li之后,在设置超时功能7秒时移除类加载 JS: $(".more-post-button").click(function () { $('.main ul').addClass('loading'); $('.main li').addClass('show-more-post'); setTimeout(

我试图执行给定的
。仅在第一次单击时单击(function()
),但它总是在单击时执行。

当点击
时,它会工作。更多post按钮
将类
加载
添加到
。主ul
将更多post
显示到
。主li
之后,在设置超时功能7秒时移除类
加载

JS

$(".more-post-button").click(function () {

  $('.main ul').addClass('loading');
  $('.main li').addClass('show-more-post');
  setTimeout(function(){
    $('.main ul').removeClass('loading');
  },7000);

});
我的问题是如何仅在第一次单击时执行此操作,而不是每次单击时执行此操作。
提前感谢。

将其保存在变量中:

var clicked = false;

  $(".more-post-button").click(function () {
  if(!clicked) {
  clicked = true;
  $('.main ul').addClass('loading');
  $('.main li').addClass('show-more-post');
  setTimeout(function(){
    $('.main ul').removeClass('loading');
  },7000);
}
});

在函数中使用“取消绑定”删除所有事件

$(this).unbind();
建议使用jquery1.7.off

$(this).off();
尝试:

它将只处理一次。

我将使用jQuery的函数。这将附加一个只触发一次的处理程序

修改的JS

$(".more-post-button").one("click", function () {

  $('.main ul').addClass('loading');
  $('.main li').addClass('show-more-post');
  setTimeout(function(){
    $('.main ul').removeClass('loading');
  },1000);

});

为什么要让事情复杂化呢,试试简单的解决方法。你也不会污染globale的名称空间! 演示开始了


实际上,您可以在
addEventListener
中发送一个选项
{one:true}
,告诉它只启动一次。因此,加上javascript并仅使用javascript,它将是:

var button = document.getElementsByTagName('button')[0];
var handler = function () { alert('once click'); };

button.addEventListener("click", handler, {once: true});
资料来源:


7秒后,类
加载将被删除,如果它再次工作?不想
。每次单击(函数()
,只想第一次。检查此项“”这不起作用。
。单击
是一个绑定,因此每次都会发生。您需要在单击函数中添加标志检查,以确保a)仍然保留一个未使用的处理程序连接,b)代码更长,c)实际上更复杂,而不是更少:)只需使用
one
,因为这是一个jQuery问题。Javascript都是关于闭包的。是什么让你觉得这很复杂?这个问题也被javascript标记,jQuery只是一个框架。
(function(){
'use-strict';

var button = document.getElementsByTagName('button')[0];
var myHandler = function() {
    var click = 0;
    return function() {
        if(click === 0) {
            alert('single click');
        }
        click++;
    }
}();


button.addEventListener('click', myHandler, false);
})();
var button = document.getElementsByTagName('button')[0];
var handler = function () { alert('once click'); };

button.addEventListener("click", handler, {once: true});