2012-04-29 3 views
2

Скажем, у меня есть некоторый код, как это, который называется на $(document).ready()Автоматически назначить обработчик события для нового элемента

$(".someClass").click(function(){ 
    //do something 
}); 

Позже у меня есть некоторые JQuery, чтобы создать элемент с классом someClass. Есть ли все-таки, чтобы автоматически прикрепить клик сверху или мне нужно снова прикрепить его вручную?

ответ

1

Существует live, который также прослушивает новые элементы

$(".someClass").live('click', function(){ 
    //do something 
}); 

Но, как из JQuery 1.7 он устарел. Вместо этого рекомендуется использовать on.

Но для того, чтобы использовать on, вам нужен контейнер для элементов, которые вы хотите связать с обработчиком. Конечно, вы можете использовать body или document, но лучше использовать более конкретный элемент

$(".someClassContainer").on('click', '.someClass' function(){ 
     //do something 
    }); 
+2

Живая осуждается, вы должны использовать '.На()' – freshnode

+0

Спасибо, только начал на JQuery, так до сих пор изучают веревки. btw это работает :) +1 –

1

Там в два простых способа сделать это, во-первых, с on():

$(".someClassParentElementPresentInTheDOMonDOMReady").on('click','.someClass', 
    function(){ 
     //do something 
    }); 

А другой в просто назначьте обработчик щелчка в точке создания нового элемента; Я не знаю, как вы делаете это, но пример ниже:

$('#addElement').click(
    function(){ 
     var newElem = $('<div />',{'class' : 'someClass'}).click(function(){ 
      // do something }).appendTo('.someClassParentElementPresentInTheDOMonDOMReady'); 

Ссылки:

3

Да. Возможно.

$("body").on("click", ".someClass", function() { 
    // ... 
}); 
3

Используйте последнюю версию JQuery и on

$(document).on('click', '.someClass', function(e){ 
    //do something 
}); 

Live устарела, но вы можете использовать его, в любом случае (не рекомендуется).

$('.someClass').live('click', function(e){ 
    //do something 
}); 
Смежные вопросы