2013-03-12 109 views
0
 $('.catNameVal').on('hover', function() { 
      notyId = $(this).attr("catnameid"); 
      $(this).append(' <a>Delete</a>'); 
      $(this).unbind('mouseenter mouseleave'); 
     }); 

由於某些原因,.on()方法不起作用。我有一個向DOM添加新值的文本框,上面的代碼應該發現那些新的DOM元素。我以前遇到過這個問題,但無法弄清楚它的原因。有什麼建議麼?另外請記住.live()也不起作用。jQuery .on()似乎不起作用

+0

請提供小提琴。 – honk31 2013-03-12 18:23:05

+2

您需要使用'.on()'委派的版本。將'selector'參數傳遞給'.on()'。 – 2013-03-12 18:23:09

+0

你可以在函數中加入'alert'或其他東西,並檢查它是否被調用? – 2013-03-12 18:23:11

回答

-3

在創建新元素以重新綁定事件處理程序之後,您需要調用.on。它沒有發現新的元素。

但是,這會打敗.on的目的,即將事件委託給處理程序。因此,更好的解決方案是設置父的結合:。

$(「#catNameValParentNode」)上(「懸停」 ...

你的想法然後將委託懸停事件該處理程序的元素的所有兒童ID catNameValParentNode

+0

False。節拍,熊,太空堡壘卡拉狄加。 .on將檢查新元素。 – BBagi 2013-03-12 18:24:39

+4

@RuralJuror那麼,它不主動檢查新的元素。當綁定到父項並給定選擇器時,它利用事件冒泡來實現事件應該應用於新元素。 – 2013-03-12 18:26:09

+0

我還沒有完成大聲笑 – 2013-03-12 18:27:13

1

哈弗是不是一個標準的事件,你不能檢查懸停,它必須是的mouseenter。

3

如果要添加到DOM,你需要使用委託版本

$(document).on('hover', '.catNameVal', function() { 
+0

它仍然不起作用 – 2013-03-12 18:30:55

+0

我不認爲,'懸停'將與'on'一起使用。 [參考](http://api.jquery.com/on/#additional-notes) – Jashwant 2013-03-12 18:34:02

+0

我試着改變懸停鼠標,但它仍然給我一個奇怪的輸出。 – 2013-03-12 18:37:14

2

你很接近,但是綁定並不像你想象的那樣動態。你在做什麼在這裏:

$('.catNameVal').on('hover', function() { 
    notyId = $(this).attr("catnameid"); 
    $(this).append(' <a>Delete</a>'); 
    $(this).unbind('mouseenter mouseleave'); 
}); 

是使用.on()綁定到所有目前已知火柴'.catNameVal',這不會發現新增加的事實後,DOM。你想要做的就是把它綁定到一個通用的父DOM元素到所有的添加。 document通常是一個安全的選擇,因爲一切都是那個孩子。然後你會包括在結合過濾器:

$(document).on('hover', '.catNameVal', function() { 
    notyId = $(this).attr("catnameid"); 
    $(this).append(' <a>Delete</a>'); 
    $(this).unbind('mouseenter mouseleave'); 
}); 

這樣做是實際發生的事件綁定到document但評估事件時應用的'.catNameVal'選擇。因此,所有匹配的事件都將被計算出來,並對照過濾器進行檢查,並在匹配時執行。這會捕獲後添加的DOM元素,因爲它們仍會冒泡至document

+0

它仍然不起作用 – 2013-03-12 18:29:07

+0

@MichaelGrigsby:定義「不起作用」。你能舉一個例子來證明這一點嗎? – David 2013-03-12 18:31:33

+0

@MichaelGrigsby:等等,甚至是一個事件「懸停」? RuralJuror在他的回答中可能是正確的,因此代碼可能確實有兩個問題(後期綁定和事件名稱)。根據jQuery,他們的內部「懸停」綁定查找「mouseenter」和「mouseleave」:http://api.jquery.com/hover/ – David 2013-03-12 18:34:10