Подтвердить что ты не робот

Добавление события клика для кнопки, созданной динамически с помощью jQuery

Как добавить событие нажатия кнопки на кнопку, добавленную динамически с помощью jQuery?

Код jQuery, который добавляет динамические кнопки внутри контейнера div:

$('#pg_menu_content').empty();
$div = $('<div data-role="fieldcontain"/>');
$("<input type='button' value='Dynamic Button' id='btn_a' />").appendTo($div.clone()).appendTo('#pg_menu_content');

Вопрос 1: Как добавить событие click для указанной кнопки? Я попробовал ниже, и он не вызвал

$("#btn_a").click(function(){
  alert ('button clicked');
});

Вопрос 2: Как я могу получить значение кнопки внутри события click? Например, я хочу получить значение "Динамическая кнопка" внутри функции события клика.

Можете ли вы, ребята, помочь мне в этом.

4b9b3361

Ответ 1

Используйте делегированный обработчик событий, связанный с контейнером:

$('#pg_menu_content').on('click', '#btn_a', function(){
    console.log(this.value);
});

То есть, привязывается к элементу, который существует в момент запуска JS (я предполагаю, что #pg_menu_content существует при загрузке страницы), и поставьте селектор во втором параметре на .on(). Когда клик появляется в элементе #pg_menu_content, jQuery проверяет, применяется ли он к дочернему элементу этого элемента, который соответствует селектору #btn_a.

Либо это, либо связать стандартный (не делегированный) обработчик кликов после создания кнопки.

В любом случае, в обработчике кликов this будет ссылаться на указанную кнопку, поэтому this.value даст вам свое значение.

Ответ 2

Использование

$(document).on("click", "#btn_a", function(){
  alert ('button clicked');
});

чтобы добавить слушателя для динамически созданной кнопки.

alert($("#btn_a").val());

даст вам значение кнопки

Ответ 3

Просто создайте элемент кнопки с jQuery и добавьте обработчик событий при его создании:

var div = $('<div />', {'data-role' : 'fieldcontain'}),
    btn = $('<input />', {
              type  : 'button',
              value : 'Dynamic Button',
              id    : 'btn_a',
              on    : {
                 click: function() {
                     alert ( this.value );
                 }
              }
          });

div.append(btn).appendTo( $('#pg_menu_content').empty() );

FIDDLE

Ответ 4

Вопрос 1: используйте .delegate в div, чтобы привязать обработчик кликов к кнопке.

Вопрос 2: используйте $(this).val() или this.value (последний будет быстрее) внутри обработчика кликов. this будет ссылаться на кнопку.

$("#pg_menu_content").on('click', '#btn_a', function () {
  alert($(this).val());
});

$div = $('<div data-role="fieldcontain"/>');
$("<input type='button' value='Dynamic Button' id='btn_a' />").appendTo($div.clone()).appendTo('#pg_menu_content');