2013-09-23 3 views
-1

У меня есть два класса кнопок, при нажатии, я хочу, чтобы что-то произошло.On Click on Buttons при создании на лету

у меня есть:

$('.btn-comment, .btn-youtube').click(function(){ 

Это используется для работы, когда кнопки были статичными. Теперь они создаются ad hoc.

Я попытался это:

$('.btn-comment, .btn-youtube').on('click', function(){ 

Но не повезло.

+0

Вам необходимо связать события или делегировать события с элементами предков, которые существуют в DOM в точке привязки. –

+2

Задано сто раз в неделю ... –

+0

У них есть тот же идентификатор, что и в '$ ('.btn-comment, .btn-youtube'). On ('click', function() {'? – hima

ответ

1

Вы должны зарегистрировать обработчик на общем статического предка (худший случай document, но чем ближе, тем лучше), а затем использовать новый .on синтаксис для делегированных обработчиков, например:

$(document).on('click', '.btn-comment, .btn-youtube', function() { 
    ... 
}); 
+0

Итак, если они в списке, лучше делать: $ ('# myList'). on ('click', '.btn-comment, .btn-youtube', function() { – panthro

+1

@panthro действительно, если сам элемент списка также не заменяется динамически. Общий предок должен быть _static_. – Alnitak

+0

Большое спасибо. – panthro

1

Это не так, как это работает. Вы должны добавить делегирование в родительский элемент. Тот, кто будет страдать от модификации.

Вы можете сделать это со всем документом:

$(document).on('click', '.btn-comment, .btn-youtube', function(){ ... }); 

Но было бы лучше сделать это с измененным элементом.

+1

Переполнение стека в каждом теге должно быть * липким * jQuery Событие Делегирование должно быть таким. – CodingIntrigue

+0

@RGraham Что вы имеете в виду? – Alvaro

+0

Это просто такой часто задаваемый вопрос, должно быть большое предупреждение когда вы добавляете тег jQuery к вопросу, говоря «Используйте следующий синтаксис, чтобы убедиться, что ваши события всегда срабатывают» :) – CodingIntrigue

0

ЗАКАНЧИВАТЬ документы jQuery для .on(). Вы должны использовать:

$('body').on('click', '.btn-comment, .btn-youtube', function(){ ... }); 

Проблема с кодом, что если .btn-comment, .btn-youtube будут вставляются динамически, то они, вероятно, не существует в точке, в которой вы пытаетесь прикрепить обработчики событий. Вышеприведенная строка кода прикрепляет обработчик к body, но активируется только элементами, соответствующими второму аргументу ('.btn-comment, .btn-youtube').

И в идеале вы заменили бы 'body' ближайшим предком, в который вставляются новые элементы.