我正在使用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属性?什么是阻止我的帖子多次执行的更好策略?
答案 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()函数。每个元素最多执行一次处理程序。