У меня есть два вызова 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');
});
Здесь скрипка
Использовать .on()
Поскольку элементы добавляются динамически, вы не можете напрямую связывать события с ними. Поэтому вам нужно использовать Event Delegation.
$('#results').on('click', '.ok_button', function() { ..code here.. }
Синтаксис
$( elements ).on( events, selector, data, handler );
Этот фрагмент не работал, потому что событие было привязано к 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");
});
});
$(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");
});
Поскольку ok_button
добавляется динамически, вам нужно использовать event delegation
для регистрации обработчика событий, например: -
// New way (jQuery 1.7+) - .on(events, selector, handler)
$('#results').on('click', '.ok_button', function() {
alert('ok');
});
$("#add_button").click(function() {
$newButton = $('<input type="button" class="ok_button" value="OK">');
$newButton.click(function() {
alert('ok');
});
$("#results").append($newButton);
});
Рабочий пример: jsfiddle.net