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

Теперь, когда я проверяю хром, это не вызывает функцию .click вообще :(

Что я я делаю неправильно?

+2

Деловая делегация. Google это – 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-youansers). – halfer

2

Если элементы создаются динамически, то вы хотите, чтобы u се

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

Кроме того, вы можете захотеть пересмотреть имеющие имя класса будучи class.

См. here для документации. См. here для аналогичного вопроса.

+0

имя класса было изменено для более легкого чтения здесь фактическое имя класса thumbCanCon .. но я подумал, что будет легче увидеть, что я ' m говорить о том, когда класс короткий и ясный –

+0

@TomaszGolinski - ОК, рад слышать, что это имя не является классом. – acarlon

2

Вам необходимо использовать метод .on() и узнать event delegation, для динамически созданных элементов. Bind событие с ближайшей статической емкости

$(document).on('click', '.class', function(){ 
    globalJID = $(this).children(".cDID").text(); 
    console.debug("clicked thCC: "+globalJID); 
}); 
Смежные вопросы