2014-01-12 186 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); 
});