使用jQuery停止onClick两次触发

Ken*_*Ken 2 jquery

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

<a id="lib-geo57" onClick="javascript:dConvert('lib-geo','57');"
Run Code Online (Sandbox Code Playgroud)

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

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

但这不起作用.我也试过了

$("#"+a+k).attr('onclick','');
Run Code Online (Sandbox Code Playgroud)

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

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

Rus*_*Cam 14

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

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

或者您可以使用jQuery定义click事件,然后使用jQuery删除(但这实际上是使用的one()方式).

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

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

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

正如另一张海报所指出的,这种变化是客户端的,因此不会在页面刷新期间保持不变.如果这是你需要的,你需要提出一些机制来坚持改变.大多数Web框架都有一个执行此操作的机制