阻止双击jQuery链接的最佳方法是什么?
我有一个触发ajax调用的链接,当ajax调用返回时,它会显示一条消息。
问题是如果我在ajax调用返回之前双击,或者单击它两次,当我真的只想要一个时,我会在页面上显示两条消息。
我需要按钮上的disabled
属性。但这不适用于链接。
$('a').on('click', function(e){
e.preventDefault();
//do ajax call
});
答案 0 :(得分:7)
您可以使用data-
属性,如下所示:
$('a').on('click', function () {
var $this = $(this);
var alreadyClicked = $this.data('clicked');
if (alreadyClicked) {
return false;
}
$this.data('clicked', true);
$.ajax({
//some options
success: function (data) { //or complete
//stuff
$this.data('clicked', false);
}
})
});
答案 1 :(得分:5)
我带来了下一个简单的jquery插件:
(function($) {
$.fn.oneclick = function() {
$(this).one('click', function() {
$(this).click(function() { return false; });
});
};
// auto discover one-click elements
$(function() { $('[data-oneclick]').oneclick(); });
}(jQuery || Zepto));
// Then apply to selected elements
$('a.oneclick').oneclick();
或者只是在html中添加自定义数据属性:
<a data-oneclick href="/">One click</a>
答案 2 :(得分:1)
你可以使用虚拟类。
$('a#anchorID').bind('click',function(){
if($(this).hasClass('alreadyClicked')){
return false;
}else{
$(this).addClass('alreadyClicked);
$/ajax({
success: function(){$('a#anchorID').removeClass('alreadyClicked');},
error: function(){$('a#anchorID').removeClass('alreadyClicked');}
});
}});
答案 3 :(得分:1)
您需要 async:false
默认情况下,所有请求都是异步发送的(默认情况下设置为true)。如果您需要同步请求,请将此选项设置为false
。
$.ajax({
async: false,
success: function (data) {
//your message here
}
})
答案 4 :(得分:0)
Check this example。您可以在第一次单击后通过CSS属性禁用该按钮(并在ajax请求或使用setTimeout后删除此属性)或使用jQuery.one()函数在第一次单击后删除触发器(不禁用按钮)< / p>
var normal_button = $('#normal'),
one_button = $('#one'),
disabled_button = $('#disabled'),
result = $('#result');
normal_button.on('click', function () {
result.removeClass('hide').append(normal_button.html()+'<br/>');
});
one_button.one('click', function () {
result.removeClass('hide').append(one_button.html()+'<br/>');
});
disabled_button.on('click', function () {
disabled_button.attr('disabled', true);
setTimeout(function () {
result.removeClass('hide').append(disabled_button.html()+'<br/>');
}, 2000);
});
答案 5 :(得分:0)
虽然提供了一些很好的解决方案,但我最终使用的方法是使用<button class="link">
我可以设置disabled
属性。
有时最简单的解决方案是最好的。
答案 6 :(得分:-1)
答案 7 :(得分:-1)
您可以停用链接(例如,href="#"
),然后使用click
事件,使用jQuery one()
函数绑定到链接。
答案 8 :(得分:-1)
将所有链接与“按钮”类绑定并尝试:
$("a.button").click(function() { $(this).attr("disabled", "disabled"); });
$(document).click(function(evt) {
if ($(evt.target).is("a[disabled]"))
return false;
});