Динамически добавленная кнопка jquery не работает

0

У меня есть два вызова jquery. Первая добавляет кнопку в html, а вторая делает что-то, если нажата кнопка добавления. Проблема в том, что вторая не работает вообще.

Html выглядит так:

<input type="button" id="add_button" value="Add the button">
<div id="results"></div>

Файл сценария выглядит так:

$("#add_button").on('click', function () {
     $("#results").html('<input type="button" class="ok_button" value="OK">');
});
$(".ok_button").on('click', function () {
    alert('ok');
});

Здесь скрипка

Теги:
button
dom

5 ответов

2
Лучший ответ

Использовать .on()

Поскольку элементы добавляются динамически, вы не можете напрямую связывать события с ними. Поэтому вам нужно использовать Event Delegation.

$('#results').on('click', '.ok_button', function() { ..code here.. }

Синтаксис

$( elements ).on( events, selector, data, handler );

Fiddle Demo

1

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

$("#add_button").on('click', function () {
   $("#results").html('<input type="button" class="ok_button" value="OK">');
   $(".ok_button").off('click').on('click', function() {
       alert("ok");
   });
});
1
$(document).on('click', "#add_button", function (){
$("#results").append('<button type="button" class="ok_button">ok</button');

});
$(document).on('click', ".ok_button", function (){
alert("i know nothing");
});
1

Поскольку ok_button добавляется динамически, вам нужно использовать event delegation для регистрации обработчика событий, например: -

// New way (jQuery 1.7+) - .on(events, selector, handler)
$('#results').on('click', '.ok_button', function() {
    alert('ok'); 
});

Демо-версия скрипта

1
$("#add_button").click(function() {
    $newButton = $('<input type="button" class="ok_button" value="OK">');
    $newButton.click(function() {
        alert('ok');
    });
    $("#results").append($newButton);
});

Рабочий пример: jsfiddle.net

Ещё вопросы

Сообщество Overcoder
Наверх
Меню