2012-03-22 98 views
3

我有2行jQuery。第一行是在「myLink」上添加事件,第二行在「#another」上添加類「myLink」,但事件不在第二個中,但是當我使用.live方法時,它是有用的。 jquery在1.7版本中引入.on方法。我想通過.in函數來做到這一點,這是可能的。jquery .on函數?

$(function(){ 

    $("a.myLink").on('click', function() { alert('Click!'); }); 

    $("a#another").addClass("myLink"); 
}) 



<a class="myLink">A link!</a> 
<a id="another">Another link!</a> 
+0

在你使用'on',做*事件委託一些研究報告*,然後閱讀文檔。一般來說,這是一項重要的技術。 – 2012-03-22 05:25:36

回答

3

我只是寫了一篇關於使用.on()更換.live()底漆和解釋.on()(您正在使用)兩種靜態形式和.on()的動態表單(你需要使用)。來自今天早些時候的引物在這裏:Does jQuery.on() work for elements that are added after the event handler is created?其中包含更多的細節。

您需要使用這樣的事情:

$(document).on('click', "a.myLink" function() { alert('Click!'); }); 

,或者甚至更好的使用你的動態鏈接的靜態祖先,而不是document(我會假設這裏是一個對象#container,因爲這將提供更好的性能像這樣:

$("#container").on('click', "a.myLink" function() { alert('Click!'); }); 
+0

感謝通報 – Carlos 2012-03-22 05:32:23

1

嘗試

$(document).on('click', 'a.mylink', function() { alert('Click!'); });

+2

在文檔樹頂部附近附加許多委託事件處理程序可能會降低性能。爲獲得最佳性能,請在儘可能靠近目標元素的文檔位置附加委派事件。 (http://api.jquery.com/on/) – Alex 2012-03-22 05:22:32

0

你的線索是,它與現場方法一起工作。它的工作原理是因爲你在設置事件之後將類添加到「#another」中。因此,您必須使用實時方法或切換順序,以便首先將類添加到「另一個」。

1

改變這一點 -

$("a.myLink").on('click', function() { alert('Click!'); }); 

本 -

$(document).on('click', 'a.myLink', function(){ alert('Click!'); });