简体   繁体   English

防止来自外部javascript文件的内联onclick

[英]Prevent inline onclick from external javascript file

Is there any way to prevent inline onclick attributes from an external js file? 有没有办法阻止来自外部js文件的内联onclick属性?

<button id="myButton" type="button" onclick="alert('Dont show me please!');" >Click me</button>

In script.js: 在script.js中:

var mybutton = document.getElementById("myButton").addEventListener("click", preventIt);

function preventIt(e){
  console.log('click event...');
  e.preventDefault();
}

Assume that we can't change html markup. 假设我们无法更改html标记。

您可以删除onclick属性,如下所示:

document.getElementsByID("myButton").removeAttribute("onclick");

Remove 去掉

window.onload=function() {
  document.getElementById("myButton").removeAttribute("onclick");
}

or replace: 或替换:

window.onload=function() {
  document.getElementById("myButton").onclick=function() {
     alert("No you cannot");
  }
}

I think that the fastest way to do this is to just clone the node, which will remove all event listeners: 我认为最快的方法是克隆节点,这将删除所有事件侦听器:

var old_element = document.getElementById("btn");
var new_element = old_element.cloneNode(true);
old_element.parentNode.replaceChild(new_element, old_element);

Just be careful, as this will also clear event listeners on all child elements of the node, so if you want to preserve that you'll have to resort to explicitly removing listeners one at a time. 请注意,因为这也会清除节点的所有子元素上的事件侦听器,因此如果您想要保留它,则必须一次一个地显式删除侦听器。 and add button after that. 然后添加按钮。

i think this should work 我认为这应该有效

function preventIt(e) {
   e = e || window.event;
   console.log(e.type);
   if (e.preventDefault) {
      e.preventDefault();
   } else {
      e.returnValue = false;
   }
   return false;
}

var myButton = document.getElementById("myButton");
myButton.addEventListener('click', preventIt);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM