2010-12-14 1 views
12

Я сгенерировал некоторые html-ссылки с jQuery и добавил их к некоторому div , но это швы, что я не могу вызвать метод click сейчас, когда эти элементы добавлены (он работал нормально, когда они были жестко закодированы в html) $('#something a').click(function() ...jQuery нажмите на добавленные элементы

Кто-нибудь знает, как это можно решить?

ответ

21

Использование .delegate() для этих случаев:

$('#something').delegate('a', 'click', function() { 

Это придает click обработчик на #something, а не направление к <a> элементов внутри ... так он работает на якорях прилагаемыми позже. Альтернатива (хуже по нескольким причинам) версии .live() так:

$('#something a').live('click', function() { 
+0

@Nick - почему использует жить хуже? Просто любопытно, потому что я использую его много. – Josh

+0

@ Ник - не могли бы вы прокомментировать причины, по которым .live() хуже - я искренне заинтересован. Ура! –

+4

@Josh, @Jakub - с '.live()', давайте возьмем код выше - селектор '$ ('# something a') запускается немедленно, но нам все равно, что он нашел ... результат теряется. Кроме того, поскольку он прикрепляется к 'document', * каждый *' click' должен быть проверен на этот селектор. С '.delegate()' только очень быстрый '$ ('# something')' selector get run, и мы используем результат. Также нужно проверять только щелчки из '# something', так как они проверяются у этого родителя, поэтому' .delegate() 'адресует 2 причины производительности ... с более дорогим селектором, выигрыш еще больше. –

0

вам нужно использовать живую функцию, чтобы убедиться, что событие щелчок мыши получает переплетено к элементам, которые были добавлены к DOM после страницы был загружен:

$('#something a').live('click',function() ..... 
+0

работает хорошо, спасибо1 – Dejan

4

Что также работает, чтобы добавить [нажмите] событие при добавлении элементов, например:

$('<someElement>').click(function(){ 
    $('<someElement>').append('<htmlCodeToAppend>'); 
    $('<appendedElement>').click(function() { /* do something */ }); 
}); 

Такой подход делает работу, но я не уверен, что я f есть какие-то предостережения - возможно, один из профи мог бы любезно вмешаться здесь.

Приветствия, Erik