2011-05-28 38 views
1

我正在另一個功能是它們的形式<a id="hi-1">test</a> <a id="hi-2">test</a>jQuery的事件

我想針對這些鏈接和綁定點擊/鼠標懸停事件,他們動態創建的鏈接列表。以下是用於定位這些鏈接(#hi-1)之一的代碼:

$(function() { 

    $("#hi-1") .bind("mouseover", highlight); 
    $("#hi-1") .bind("mouseleave", highlight); 
      $("#hi-1") .bind("click", highlight); 

    }); 
    function highlight(evt){ 
    $("p#p-1").toggleClass("highlighted"); 
    } 

這應該切換類名稱。

我似乎無法得到它的工作,我相信這可能是與動態創建鏈接的事實。不過,我有一點jQuery的經驗,我可能會以錯誤的方式去做。

任何幫助,非常感謝。

回答

2

嘗試

$("#hi-1").live("mouseover mouseleave click", function(){ 
    $("p#p-1").toggleClass("highlighted"); 
}); 
+0

+1對於綁定多個事件在單一活 – 2011-05-28 09:36:41

+0

這對我來說,無法讓我的頭圍繞.delegate。完美,謝謝 – tcnarss 2011-05-28 09:55:14

2

你應該使用jQuery的.live()方法。

http://api.jquery.com/live/

附加一個處理程序的情況下爲當前選擇現在和將來匹配這,所有的元素。

例子:

$('.clickme').live('mouseover', function() { 
    // live handler called 
}); 
+2

使用.delegate()代替http://api.jquery.com/delegate/,因爲它更高效。 – Dormouse 2011-05-28 09:21:34

5

選擇器適用於創建的時間。您選擇元素,然後綁定到這些元素,而不是綁定到選擇器。

但是,您可以使用事件冒泡 - 通知子元素事件的祖先元素。的jQuery爲此提供了一個美麗的語法與delegate

$('#containerElement').delegate('#hi-1', 'click mouseover mouseleave', highlight); 

這假定#containerElement是將被匹配的所有要素的祖先元素。


但是,如果你只有一個元素(如通過給它一個ID建議)可能更容易簡單地處理程序在創建元素時綁定。