2010-05-22 116 views
2

我試圖使像這樣使用jQuery的remove屬性:刪除的onmouseover屬性和onmouseout

$('#rom-img_1').removeAttr('mouseover'); 
$('#rom-img_2').removeAttr('mouseout'); 

但是,它不會刪除該事件的影響的事件仍然在鼠標懸停和鼠標移開時觸發。我曾嘗試在事件名稱之前添加「on」,但JQuery不會像那樣使用它。

爲什麼不能正常工作,我該如何刪除這些屬性。

這是一個位的HTML:所有的任何幫助

<div onmouseout="$('#heart_401').css({'display':'none'});" onmouseover="$('#heart_401').css({'display':'block'});" id="row-img_11"></div> 

感謝

+0

一旦瀏覽器解析他們 - 事件處理程序,也許還是屬性以及取決於瀏覽器...是不是將它們插入首先選擇一個選項? – 2010-05-22 13:52:57

+0

當我使用螢火蟲刪除屬性似乎事件不再觸發,這是由於螢火蟲或應用刪除屬性時應該發生? – Abs 2010-05-22 14:00:47

回答

3
$('#rom-img_1') 

您已經拼錯row-img_11。 jQuery不會錯誤,你只是得到一個沒有匹配的選擇器結果。

removeAttr of onmouseover適合我這個固定的,雖然你通常想避免使用這樣的內聯事件處理程序屬性。

+0

其實你是對的,有一個拼寫錯誤,但沒有額外的是我的類型,但「rom」而不是「row」!該死的!我不知道爲什麼有人忽視你,但這是正確的答案。 – Abs 2010-05-22 14:02:22

4

切勿在HTML代碼中使用onsomething註冊事件處理。它使您的標記不易讀,並導致各種問題(如this不指向元素)。

請務必使用$(...).mouseover(function() { /* yourcode */ })$(...).bind('mouseover', function() { /* yourcode */ })註冊。

然後,您可以通過使用$(...).unbind('mouseover')輕鬆卸下把手。

當然,你也可以使用其他處理器一樣點擊焦點,而不是鼠標懸停

removeAttr不起作用的原因是處理程序不是屬性。在內部它們變成了處理程序,因此你不能通過刪除屬性來刪除它們。 然而,這可能工作:

$('#rom-img_1')[0].mouseover = function() {}; 
$('#rom-img_1')[0].mouseout = function() {}; 
+0

div是動態生成的,我不會知道元素的id。另外,這是一個小項目。我只需要它的工作! :) – Abs 2010-05-22 13:59:35

+0

我認爲那些屬性,即onmouseout:http://reference.sitepoint.com/html/event-attributes/onmouseout – Abs 2010-05-22 14:01:45

1

要在jQuery中獲取並設置mouseover和mouseout事件,請使用.mouseover().mouseout()。語法如下:

集(除去在這種情況下):

$("#row-img_11").mouseover(""); 
$("#row-img_11").mouseout(""); 

要應用的方法的一組的div:

$("div:contains('row-img')").each(function() { 
    $(this).mouseover(""); 
    $(this).mouseout(""); 
}); 
0

如果你只是拼寫正確的ID,它工作得很好:

$('#row-img_11').removeAttr('onmouseover').removeAttr('onmouseout');