2012-05-24 56 views
3

我這樣做是這樣的:所有<img>標記中除去onmouseover事件

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

這是行不通的。爲什麼?

+0

什麼版本的jQuery您使用的是? – Patricia

+0

在你使用的構造中'this''是dom-element而不是jquery對象,因此沒有'unbind'方法。 – Yoshi

+0

jquery版本1.7 – karaxuna

回答

7

嘗試像下面,

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

無需循環..也應該mouseoveronmouseover

假設:您正在使用.bindmouseover處理

綁定

我沒有使用綁定。一些圖像具有onmouseover屬性,我想刪除它們。我嘗試$( 'IMG')。removeAttr( '的onmouseover'),但它仍然無法正常工作

  1. 使用內聯事件處理程序是不是一個標準。
  2. 由於您使用jQuery,你應該綁定處理程序如下圖所示。

代碼: - 你有什麼(不推薦)各地>

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

的作品,(Reference

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

和更高版本可以使用.off拆散他們

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

我沒有使用綁定。一些圖像具有onmouseover屬性,我想刪除它們。我嘗試$('img')。removeAttr('onmouseover')但它仍然無效 – karaxuna

+0

非常感謝。 $('img')。removeAttr('onmouseover')在我的情況下工作,但我會考慮內聯事件處理程序沒有被優先考慮。 – karaxuna

5
  • 當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 
    }); 
+0

+1,但是有沒有理由將函數分配給'.onmouseover'屬性而不是'null'? – 2012-05-24 14:58:23

+0

@amnotiam你可以指定null,但是'function(){return false}'是我知道如何去做的。 – Joseph

+1

+1。每個都不是真的需要 – karaxuna