2014-01-12 184 views
0

我有一個(可能)很容易修復的問題,但我無法弄清楚什麼是錯的。我嘗試運行.click()jquery,但它不會觸發。我認爲這是因爲實際的DOM項目是通過JavaScript動態創建的(這是否重要?)。jquery .click不會觸發

動態創建的內容是:

<div class="rPics"> 
    <div class="class"> 
     <canvas id="canSSJ01" class="thumbCan" width="600" height="720"></canvas> 
     <p class="cDID hidden">SSJ01</p> 
    </div> 
    <div class="class"> 
     <canvas id="canSSJ02" class="thumbCan" width="600" height="720"></canvas> 
     <p class="cDID hidden">SSJ02</p> 
    </div> 
</div> 

的Javascript:

$('.class').click(function(){ 
    globalJID = $(this).children(".cDID").text(); 
    console.debug("clicked thCC: "+globalJID); 
}); 

現在,當我檢查鉻,它不會觸發。點擊功能在所有:(

什麼時我做錯了嗎?

+2

事件代表團。谷歌它 – megawac

+1

http://learn.jquery.com/events/event-delegation/ –

回答

2

隨着項目綁定事件是動態創建的,您可以使用事件代表團jquery .on() method

$(document).on('click', '.class', function(){ //Here use `on` 
    globalJID = $(this).children(".cDID").text(); 
    console.debug("clicked thCC: "+globalJID); 
}); 

如果你有一個老版本的jQuery,你可以完成相同的與live

$(document).live('click', function(){ 
+0

嗨,埃德加。你的答案很好,但我可以要求你不要加上謝謝,或者「希望這有助於」每一個人?無論如何,他們將[一般會被編輯](http://meta.stackexchange.com/questions/34464/questions-with-lots-of-thank-you-answers)。 – halfer

2

如果元素是動態創建的,那麼你想要你se

$(document).on('click', '.class', function() { 

此外,您可能想重新考慮將類名稱爲class

請參閱here的文檔。 對於類似的問題,請參考here

+0

類的名稱被更改爲更容易閱讀在這裏實際的類名是thumbCanCon ..但我認爲這將是更容易看到我'我在談論什麼時候課程很短並且很清楚 –

+0

@TomaszGolinski - 好的,很高興聽到這個名字不是課程。 – acarlon

2

對於動態創建的元素,您需要使用.on()方法並學習event delegation。與最近的靜態容器

$(document).on('click', '.class', function(){ 
    globalJID = $(this).children(".cDID").text(); 
    console.debug("clicked thCC: "+globalJID); 
});