我有一系列表格格式的链接,所有链接都使用不同的ID。我需要防止双击它们以防止双重执行相关的服务器代码。但是,用户可以单击不同的链接。我这样说是因为我遇到了以下解决方案:
$("a.button").one("click", function() {
$(this).click(function () { return false; });
});
我认为,只要点击一个链接太强大,就会停止点击整个页面。我喜欢上面的类绑定方法,但是用户应该能够(单个地)点击任何链接。
赞赏的想法。 感谢。
修改
目前正在尝试:
<a class="dblclick" href="....
和
<script type="text/javascript">
$("a.dblclick").dblclick(function (e) { return false; });
</script>
但似乎没有用。我正在使用Mozilla。
答案 0 :(得分:4)
这会在第一次点击时为链接添加一个类。第二次,当班级出现时,链接将无法运作。
$("a.button").on("click", function(event) {
event.preventDefault();
if $(this).hasClass('clicked')) {
return false;
} else {
$(this).addClass('clicked').trigger('click');
}
});
答案 1 :(得分:1)
对于你想要做什么感到困惑。
您是否可以删除处理它的函数上的click事件? 您可以使用
从单个控件中删除事件$( "#foo").unbind( "click" );
因此,您可以捕获初始点击,然后删除处理程序。
$( "#foo" ).click(function(ev) {
ev.preventDefault();
$( "#foo").unbind( "click" );
});
preventDeafault()调用会阻止您的表单提交,只是在表单中执行此操作。
答案 2 :(得分:1)
尝试在元素中设置标志
$("a.button").on("click", function() {
ev.preventDefault();
if($(this).attr('data-clicked')){
$(this).attr('data-clicked', true)
return true
}
return false
});
答案 3 :(得分:1)
尝试使用双击(http://api.jquery.com/dblclick/)
双击链接时,将触发click事件,然后触发双击事件。您可以取消双击事件。
$("a.button").dblclick(function(e) { return false; });
答案 4 :(得分:1)
在开始时使用one
。
澄清$("a.button").one(...)
只会在每个元素上注册一次点击,这似乎就是您想要的。
之后我们只需要在服务器完成处理后再次设置clickhandler。
//bootstrap
$("a.button").one("click", clickhandlerOnce);
function clickhandlerOnce(event) {
var $that = $(this),
url = "http://www.example.com";
$.getJSON(url, function(result){
//TODO: handle your result here.
//NOTE: take care of errors.
//since we're done now with the server processing,
//we may bind the handler again if needed.
$that.one("click", clickhandlerOnce);
});
};