HTML从元素中删除所有事件

时间:2017-06-07 06:47:33

标签: javascript jquery html

我的主程序中有一些javascript函数(我无法修改此代码),其中一些不需要。我想添加新的javascript并禁用不必要的事件(例如onClick)。 我尝试了这样的事情:

function disableClickEvent(){
    var elems = document.body.getElementsByTagName("a");
    for (i = 0; i < elems.length; i++) {
        for (var key in toDisableMap) {
             if(elems[i].innerHTML == key ){
                 elems[i].unbind();
                 break;
             }
         }
    }
}

但是有一个错误(在控制台中):

jQuery.Deferred exception: a[i].unbind is not a function disableClickEvent

我不确定unbind是禁用事件的正确方法。怎么可能解决这个问题?

4 个答案:

答案 0 :(得分:0)

您正在getElementsByTagName返回的对象上调用jQuery方法。 getElementsByTagName不返回jQuery对象。您需要在现有代码中执行$(elems[i]).unbind();或更好地关闭,找到$("a", "body")之类的锚标记,然后使用它们

答案 1 :(得分:0)

您需要使用jQuery对象才能使用unbind()

我更新了您的代码段,将方法更改为jQuery对应方。

function disableClickEvent() {
    var elems = $("a");
    elems.each(function() {
        for (var key in toDisableMap) {
            if ($(this).text() == key){
                $(this).prop('onclick',null).off('click');
                break;
            }
         }
    })
}

答案 2 :(得分:0)

&#13;
&#13;
$(document).ready(function(){
  $('a').click(function(){
    alert($(this).attr('id'));
  });
});
function disableClickEvent(){
    var elems = document.body.getElementsByTagName("a");
    for (i = 0; i < elems.length; i++) {
    $(elems[i]).off('click'); 
    }
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a id="test1" style="cursor:pointer">Test1</a>
<br>
<a id="test2"  style="cursor:pointer">Test2</a>
<br>
<button onclick="disableClickEvent()" value="Disable">Disable</button>
&#13;
&#13;
&#13;

使用.Off()时,你必须使用Jquery对象$(elems [i])。off(&#39;点击&#39;);

答案 3 :(得分:0)

检查是否有效。使用$(elems[i]).removeAttr('onclick');从锚标记中删除click事件。按下按钮后,将删除锚标记中的click事件

function disableClickEvent(){
  
    var elems = document.body.getElementsByTagName("a");
    for (i = 0; i < elems.length; i++) {
         
         $(elems[i]).removeAttr('onclick');
         
       /* for (var key in toDisableMap) {
             if(elems[i].innerHTML == key ){
                 elems[i].unbind();
                 break;
             }
         }*/
    }
}

function clickevent(event){
  event.preventDefault();
  console.log("clicked")
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button onclick="disableClickEvent()"> Remove events </button>

<a href="" onclick="clickevent(event)">Anchor tag click</a>