使用jQuery停止onClick两次触发

时间:2009-10-10 13:34:45

标签: jquery

我正在使用jQuery.post在用户点击外部链接时执行操作。我已将onClick事件附加到链接:

<a id="lib-geo57" onClick="javascript:dConvert('lib-geo','57');"

事件触发,但此操作只应执行一次。为了避免第二次触发,我想到了删除onClick属性:

function dConvert(a,k){
    $.post("dConverter",{aid:a,key:k});
    $("#"+a+k).removeAttr('onclick');
};

但这不起作用。我也试过

$("#"+a+k).attr('onclick','');

没有成功。 post函数继续在上述两个例子中起作用。

为什么我无法删除或更改onClick属性?什么是阻止我的帖子多次执行的更好策略?

4 个答案:

答案 0 :(得分:14)

使用one()会在第一次点击<a>链接后删除事件处理程序。

$('#lib-geo57').one('click', function() {
    $.post("dConverter",{aid:'lib-geo',key:'57'});
});

或者您可以使用jQuery定义click事件,然后使用jQuery删除(但这基本上是使用one()执行的操作)。

$('#lib-geo57').bind('click', function() {
    $.post("dConverter",{aid:'lib-geo',key:'57'});
    $(this).unbind('click');
});

如果您坚持使用内联onclick属性,那么您只需要为该属性指定null以在第一次单击后删除事件处理程序。

function dConvert(a,k){
    $.post("dConverter",{aid:a,key:k});
    $("#"+a+k)[0].onclick = null;
};

作为another poster has pointed out,此更改是客户端的,因此不会在页面刷新期间保留。如果这是你需要的,你需要提出一些机制来坚持改变。大多数Web框架都有一个执行此操作的机制

答案 1 :(得分:0)

您可以通过调用以下方法取消绑定点击事件:

$("a #mylink").unbind('click');

答案 2 :(得分:0)

jQuery在回发后事件之间不是有状态,并且不会记住按钮状态或表单已发布的事实。

您需要在客户端cookie或url属性中保存状态,但这不是最佳解决方案。

我会从服务器端(php,asp.net等)处理这个要求

答案 3 :(得分:0)

您可以尝试使用Jquery .one()函数。每个元素最多执行一次处理程序。

http://api.jquery.com/one/