2012-01-17 117 views
3

我有一個動態創建如下:在創建對象之前,我可以添加事件嗎?

<a class="editLink" href="/location/Edit?city=05">Edit</a> 

這和其他EDITLINK行動態創建。

我想什麼做的是添加一些jQuery的這些:

$(".editLink").button(); 
$(".editLink").click(function() { 
    alert('edit link'); 
    return false; 
}); 

有一些方法可以讓我分配在此之前的元素出現在哪裏?我怎樣才能處理以下內容:

$(".editLink").button(); 

當.editLink不在那裏時。

回答

3

通過將處理程序放在文檔上來使用事​​件委託。

$(document).on('click', '.editLink', function() { 
    alert('edit link'); 
    return false; 
}); 

這被稱爲「活」或「委託」事件。 $(document)部分標識將處理該事件的元素,這個代碼運行時必須存在。你應該儘可能將它設置爲一個父元素。使用document有點過分,但它會起作用。

'.editLink'字符串用處理程序標識元素內任何子元素的選擇器。事件發生時,會根據此選擇器檢查原始元素,看看是否有匹配的事件觸發事件。如果是這樣,那麼運行事件處理程序。

看到這裏的工作例如:http://jsfiddle.net/Squeegy/guz9A/1/

如何注意處理程序時綁定的鏈接不存在,但他們仍然觸發處理程序時它們加入以後。

+0

感謝亞歷克斯,你可以使用任何上下文選擇(可能的父元素)。我怎樣才能處理 - $(「。editLink」)。button();有沒有辦法用「on」來做這件事? – 2012-01-17 07:55:10

+0

這不是一個標準的jQuery方法,我不知道它做什麼或爲什麼你需要它,所以不能提供很多建議... – 2012-01-17 08:15:35

+0

對不起,延遲。 Button是一個jQuery UI方法。 – 2012-01-17 09:40:05

3

您可以使用jQuery.live()方法來偵聽頁面上的新元素。當它添加到頁面時,事件會自動添加。

3

是的,你可以做到這一點deligating事件使用on INF您使用jQuery 1.7或以上其他使用delegate

$('body').on('click', '.editLink', function() { 
    alert('edit link'); 
    return false; 
}); 

,而不是身體,如果你知道要提高性能

相關問題