2013-07-27 3 views
-1

Я добавляю динамический контент на php-страницу, используя jQuery. У меня нет проблем с добавлением контента, который я просто не могу найти, чтобы найти новый контент для события click.Как сделать динамически добавленный контент кликабельным?

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

$("#oldstuff").after('<div id="newstuff">Some content that should respond to click event</div>'); 

Edit: настоящее время я использую JQuery 1.9.1, я использую 1.6.2, но я проверить Magnific-всплывающее окно, которое требуется более новая версия Jquery.

я не отправлял мои неудачные попытки (

$("#newstuff").click(function() {... 
$("#newstuff").live('click', function() {... 
binding the click event, etc. 

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

+0

Где ваше событие щелчка? – Red

ответ

1

не может найти способ заставить новый контент реагировать на событие клика.

Вы должны сделать event delegation

$("#oldstuff").on("click", '#newstuff',function(){ 
alert($(this).text()); 
}); 
+1

@downvoter, не могли бы вы оставить комментарий? –

+0

Это работает - может кто-нибудь объяснить, почему это было отклонено? – TheSteven

+1

Это ** самая ** раздражающая вещь на SO, когда кто-то опустошает без причины. – Maroun

4

Вы можете прикрепить событие щелчка перед тем вставить элемент в DOM:

$('<div id="newstuff">...</div>').click(function(){ 
    //do something 
}).insertAfter('#oldstuff'); 
+0

Не знаю, как это сделать, проверите это ... – TheSteven

+0

Это показывает обещание, и я буду исследовать его больше в будущем.В настоящее время я отделяю код вставки/модификации содержимого от кода обработки событий и, как таковой, был другой ответ, который был лучшим решением для того, что я искал. Спасибо за ваш вклад! – TheSteven

-2

Попробуйте

$("#yourElementId").live("click",function(){ 
    alert($(this).text()); 
}); 

Как .click не работает после загрузки DOM или динамически созданный элемент

+0

Может ли кто-нибудь объяснить, почему downvote этот пост. Мы все знаем, что после загрузки dom. '.click' не работает, поскольку' .click' прикрепляется до загрузки dom. Поэтому у jquery есть новый метод '.live' или' .on', но '.live' лишена более новой версии. И то же самое работает в моем случае. –

+1

Поскольку синтаксис '.on()' отличается от '.live()', где в выбранном объекте статический элемент, первым аргументом является событие, второе - динамический элемент, а третий - callbakc. – Ohgodwhy

+0

@Ohgodwhy для вашего внимания, я нашел синтаксис формы JQuery официальный сайт 'http: // api.jquery.com/on /' теперь вы также можете объяснить почему? –

0

Что вам нужно, чтобы приложить событие в родительский элемент.

HTML:

<div id="parent"> 
    <div class="thediv">Hello</div> 
</div> 

JavaScript:

function addDiv() { 
    var div = document.createElement('div'); 
    div.className = 'thediv'; 
    document.getElementById('parent').appendChild(div); 
} 

$('#parent').on('click', '.thediv', function() { 
    // ... 
}); 

Смотрите, если этот метод работает.

+1

Эта техника - это делегирование событий. Да, это работает здесь –

-1

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

первых добавить DOM.

$("#oldstuff").after('<div id="newstuff">Some content that should respond to click event</div>'); 

а затем связать событие.

$('#newstuff').on('click',function(){alert('do your stuff!')}); 

Или

$('#newstuff').click(function(){alert('do your stuff!')}); 
+0

Любая причина всего сообщения - это код? – Doorknob

+0

Ни одна из них не работает с динамическим контентом. Если я правильно понимаю, что говорят другие комментарии, это потому, что «#newstuff» не был частью исходного контента, загруженного в DOM, но добавленного впоследствии. – TheSteven

+0

вы можете связать событие с существующей DOM как ваш DOM (

Some content that should respond to click event
), загруженный позже, чтобы связать событие после загрузки DOM, тогда оно будет работать – anand4tech

Смежные вопросы