我想替换网页中所有锚点click事件的默认操作。
当我使用这段代码时:

<html> <head> <script>
var list=document.getElementsByTagName("a");
var isChecked = false;

function load () {
    for (i=0; i<list.length; i++)
    {
        var old = (list[i].onclick) ? list[i].onclick : function () {};
        list[i].onclick = function () {
        if( !isChecked)
        {
            test();
            old();
        }
        else
            old();
        };
    }
}
function test() {
    alert("new action");
    isChecked = true;
}
</script> </head>
<body onload="load();">
<a id="nr_1" onClick="alert('test');"> Anchor 1 </A>
<a id="nr_2" onClick="alert('test2');"> Anchor 2 </A>
</body> </html>


当我单击一个锚点时,我会从测试功能中得到警报,然后是第二个锚点的默认功能(即使我单击了第一个锚点)。当我再次单击两个锚点之一时,我总是从第二个锚点收到警报。
如何为每个锚元素放回原始的onclick函数?当有人在jquery中有解决方案时,我也会很高兴。

编辑

我使用此代码成功:

function load()
{
$('a').attr('disabled', 'disabled');

$('a').click(function(e){
    if($(this).attr('disabled'))
    {
    alert("new");
    e.preventDefault();
    $('a').removeAttr("disabled");
    this.click();
    }
});
}


加载页面时,此函数称为为所有锚元素提供“禁用”属性。单击元素后,e.preventDefault()函数将禁用嵌入式onclick函数。然后,我删除“ disabled”属性并再次调用该元素的click函数。因为现在元素没有“禁用”属性,所以仅执行默认功能。我仍然愿意为这个问题提供“更优雅”的解决方案,但是现在我是一个快乐的露营者!

最佳答案

如果使用jQuery,则可以将一次性处理程序与持久性处理程序结合使用:

.one().on()的文档

工作示例:http://jsfiddle.net/Q8gmN/

HTML示例:

<input type="button" id="click" value="click" />



示例JavaScript:

button.one('click', function () {
  console.log('one time function fired');
});

button.on('click', function () {
  console.log('persistent function fired');
});


10-08 12:05