从所有的<img>标签中删除onmouseover事件

5
我这样做:

我这么做:

$.each($('img'), function () {
    this.unbind('onmouseover');
});

这不起作用。为什么?

你使用的是哪个版本的jQuery? - Patricia
你使用的结构中,this 是 DOM 元素而不是 jQuery 对象,因此没有 unbind 方法。 - Yoshi
2个回答

10

可以尝试以下方法:

$('img').unbind('mouseover');

不需要循环,而且应该是mouseover而不是onmouseover

假设:您正在使用.bindmouseover处理程序绑定

我没有使用bind。有些图像具有onmouseover属性,我想将它们删除。我尝试过$('img').removeAttr('onmouseover'),但仍然不起作用。

  1. 在行内事件处理程序不是标准方式。
  2. 既然您正在使用jQuery,则应按以下方式绑定处理程序。

代码:

$('img').on('mouseover', function () {
     //Your code
});

之后可以使用.off来取消绑定 ->

$('img').off('mouseover');

一个解决你当前问题的方法(不太推荐),(参考)

$.each($('img'), function () {
    $(this).removeAttr('onmouseover');
});

我没有使用 bind。一些图像具有 onmouseover 属性,我想删除它们。我尝试过 $('img').removeAttr('onmouseover'),但仍然无效。 - karaxuna
非常感谢。在我这里,$('img').removeAttr('onmouseover') 这个方法起作用了,但是我会考虑内联事件处理程序并不是首选的方式。 - karaxuna

6
  • 当jQuery元素集合已经有内部的each()时,就不需要使用$.each()了。

  • 此外,在jQuery中,您可以“串联”移除处理程序方法,因为每个函数都返回相同的集合。每个附加方法都有自己的删除方法对,因此请相应地使用。

  • 最后,要删除DOM元素上的处理程序(内联事件处理程序),请将其替换为null或执行return false的函数。

这是概念代码:

$('img')
    .unbind('mouseover')               //remove events attached with bind
    .off('mouseover')                  //remove events attached with on
    .die('mouseover');                 //remove events attached with live
    .each(function(i,el){              //and for each element
        el.onmouseover = null          //replace the onmouseover event
    });

+1,但是将函数分配给.onmouseover属性而不是null是否有原因? - user1106925
@amnotiam 好吧,你可以赋值为 null,但是 function(){return false} 是我知道的方法。 - Joseph
@karaxuna 我从来不知道 removeAttr() 也可以移除处理程序。现在我学到了新东西 :) - Joseph

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接