2012-08-05 53 views
0

我是半新的javascript/jquery所以先進的道歉,如果我失去了一些基本的東西。我有一個函數,只要用戶鍵入具有特定類的元素,就會觸發該函數。Jquery類選擇器無法選擇新的類實例添加.append()

 $('.relevantClass').keyup(function(){ 
    //code... 
    }); 

現在,這個功能可能最終,根據不同的情況,通過.append()方法創建一個很好的協議新的HTML,包括relevantClass的新實例。

 var newHTML = <div class='relevantclass'>Content...</div>; 
    $('#wrapper').append(newHtml); 

但是,當用戶鍵入新創建的相關類時,jquery選擇器似乎沒有檢測到並執行該函數。我已經檢查了新創建的Html,並且它有正確的類標籤和相關類的舊實例。

我猜這與.append()有關。搞亂DOM,我需要「刷新」選擇器,讓它做jquery的事情來研究DOM來找到新的類。有關如何做到這一點的任何想法?有沒有我找不到的jquery方法?

在此先感謝!

回答

3

你必須使用on()要附加的動態內容,工作事件:

var $parent = $("selector"); //the element you're appending .relevantClass to 
$parent.on("keyup",".relevantClass",function(){ 
    //code... 
}); 

請記住,與動態內容的工作,您必須將事件附加到一個真實存在的relevantClass最親近的父母頁面加載。

有些人使用body,但您應該習慣使用父元素儘可能接近動態內容。這是事件代表團的規模較小。

有關on()的更多信息here

此外,我希望newhtml變量包裹在引號中。

+0

太好了,謝謝!看起來這正是我需要的。如果可以的話,我會在明天讓每個人都知道。 newHtml實際上是一些約200個char字符串,大約有三個嵌套div,有很多變量,我必須使用.replace和regex來動態格式化。然後它傳遞給.append。只是想讓它變得可怕。 – Newmu 2012-08-05 07:31:12

+0

工作很好,謝謝! – Newmu 2012-08-08 01:35:19

+0

@purmou雖然我同意使用最接近的父代作爲委託事件處理程序是一種好習慣,但您應該在代碼中更清楚地說明這一點;如果'.relevantClass'還不存在,'.parent()'不會找到任何東西,處理程序也不會被綁定。它在這種情況下工作,因爲現有的'.relevantClass'元素和代碼只是附加更多,但一般來說,你應該根據html硬編碼父代的直接選擇器。 (無論如何+1) – nbrooks 2012-08-08 01:39:06

0
$('.relevantClass').on('keyup', function(){ 
    //code... 
}); 
+1

不適用於動態添加的內容。 – Purag 2012-08-05 07:19:23

0

試着這麼做

$('body').on('keyup', '.relevantClass', function() { ... } 

的想法是,你使用現有的根元素,並使用你的類選擇作爲過濾器。請參閱示例here