你如何覆盖内联onclick事件?

Dio*_*ane 45 html javascript

这看起来似乎很简单.

如何使用JavaScript覆盖以下HTML中的onclick事件?

<a id="sample" href="..." onclick="alert('hello world')" />...</a>
Run Code Online (Sandbox Code Playgroud)

我已经尝试过使用jQuery,但是这并不能解决问题:

$('#sample').attr('onclick','alert("done")')
Run Code Online (Sandbox Code Playgroud)

假设HTML是预先编写的,除了使用JavaScript操作之外无法更改.

And*_*are 53

试试这个:

// Setting the DOM element's onclick to null removes 
// the inline click handler
$("#sample")[0].onclick = null;
$("#sample").click(function() { alert("done") });
Run Code Online (Sandbox Code Playgroud)

  • @Diodeus"我会假设,因为我通过ID选择它将是唯一的"=>在这个特定情况下[0]的点不是限制选择而是将格式从jQuery对象转换为DOM元素 (5认同)
  • 继这个方法之后,就像我的情况一样,如果你匹配多个元素,你可以做`$('.datacell').each(function(){this.onclick = $ .noop;});`沉默所有的'onclick` (3认同)
  • 那是不明显的,它奏效了。谢谢安德鲁。为什么是 [0]? (2认同)

Ben*_*ard 7

<a id="sample" href="..." onclick="alert('hello world'); return false;" />...</a>
Run Code Online (Sandbox Code Playgroud)

要么

$('#sample').attr('onclick','alert("done"); return false;')
Run Code Online (Sandbox Code Playgroud)

尽管能够return false;直接在onclick或使用jQuery设置,但它实际上并不需要使用jQuery.好处是,无论出于何种原因,您的jQuery脚本都会导致a 404,您的代码仍然有效.

我在这里找到了答案.


sup*_*nee 7

这也可以在没有jQuery的情况下完成:

document.getElementById("sample").setAttribute('onclick','alert("done")');
Run Code Online (Sandbox Code Playgroud)