我尝试仅在第一次点击时执行给定.click(function()
,但在点击时它始终执行。
点击.more-post-button
后,它会将loading
添加到.main ul
,show-more-post
添加到.main li
,然后在setTimeout函数上删除类loading
7秒
JS :
$(".more-post-button").click(function () {
$('.main ul').addClass('loading');
$('.main li').addClass('show-more-post');
setTimeout(function(){
$('.main ul').removeClass('loading');
},7000);
});
我的问题是如何只在第一次点击时才这样做,而不是每次点击都这样做 提前谢谢。
答案 0 :(得分:7)
尝试:
$(".more-post-button").one("click", function () {
$('.main ul').addClass('loading');
$('.main li').addClass('show-more-post');
setTimeout(function(){
$('.main ul').removeClass('loading');
},7000);
});
它只会处理一次。
答案 1 :(得分:4)
为什么要复杂化,尝试简单的关闭。你也不会污染全局名称空间! 演示进行here
(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);
})();
答案 2 :(得分:2)
我会使用jQuery' .one()
函数。这会附加一个只会触发一次的处理程序。
修改JS
$(".more-post-button").one("click", function () {
$('.main ul').addClass('loading');
$('.main li').addClass('show-more-post');
setTimeout(function(){
$('.main ul').removeClass('loading');
},1000);
});
答案 3 :(得分:2)
实际上,您可以发送addEventListener
一个选项{ once: true }
,告诉它只发一次。因此,加起来@fubbe并且仅使用javascript,它将是:
var button = document.getElementsByTagName('button')[0];
var handler = function () { alert('once click'); };
button.addEventListener("click", handler, {once: true});
来源:
答案 4 :(得分:1)
将其保存在变量中:
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);
}
});
答案 5 :(得分:1)
在您的函数中使用unbind删除所有事件
$(this).unbind();
从jQuery 1.7 .off是推荐的方式
$(this).off();