Якщо ви коли-небудь динамічно генеруєте вміст сторінки або завантажуєте вміст через AJAX, наступний приклад - це справді той шлях, яким ви повинні йти:
- Це запобігає подвійному прив'язуванню у випадку, коли сценарій завантажується більше одного разу, наприклад, у запиті AJAX.
- Прив'язка живе
bodyу документі, тому незалежно від того, які елементи додані, переміщені, видалені та повторно додані, усі нащадки bodyвідповідності вказаному селектору збережуть належну прив'язку.
Код:
var bind_to = ':input';
$(document.body).off('change', bind_to);
$(document.body).on('change keyup', bind_to, function(event) {
alert('something happened!');
});
Зверніть увагу! Я використання $.on()і $.off()швидше , ніж інші методи з кількох причин:
$.live()і $.die()є застарілими та були пропущені в останніх версіях jQuery.
- Мені потрібно або визначити окрему функцію (отже, захаращуючи глобальну область дії), і передати функцію обом
$.change()і $.keyup()окремо, або передати одне і те ж оголошення функції кожній викликаній функції; Дублююча логіка ... Що абсолютно неприпустимо.
- Якщо елементи коли-небудь додаються до DOM,
$.bind()не динамічно прив'язуються до елементів під час їх створення. Тому, якщо ви прив'язуєте :inputі додаєте вхід до DOM, цей метод прив'язки не приєднується до нового вводу. Потім вам потрібно буде явно розв’язати, а потім знову прив’язати всі елементи в DOM (інакше прив’язки дублюються). Цей процес потрібно буде повторювати кожного разу, коли в DOM додається вхід.