jQuery подія кліка по динамічно створеним елементам
Іноді виникає завдання створити подія кліка по елементу. Зазвичай таке завдання виконується за допомогою jQuery
А що ж буде при натисканні на динамічно створені елементи? Адже часто необхідно застосовувати події на елементах які, наприклад, отримані в ajax запиті.
Дана подія просто не спрацює, тому що в ієрархії DOM НЕ буде елементів, які додалися вже після завантаження основого документа. Для цього існує вихід з даної ситуації і це використовувати "жівіе" події. До версії jQuery 1.7 можна було використовувати метод live () але починаючи з версії jQuery 1.9 і вище даний метод був прибраний і замість нього варто використовувати метод on (). Почерпнути інформацію про даний метод можна їх офіційної документації по jQuery. Від себе додам, що метод on () введений щоб об'єднати три методу бібліотеки, що встановлюють обробники подій на елементи сторінки: bind (). delegate () і live (). Самі ці методи вважаються тепер застарілими, хоча ще підтримуватися.
Наведемо приклад використання даного методу
Використовувати дану конструкцію до всіх елементів не рекомендується і краще при створенні події клі по динамічно вставленим (доданим) елементам краще як:
До речі в Yii можна рендерить види спеціально для запитів з ajax методом renderPartial () коли немає необхідності завантаження основого шаблону розмітки (зазвичай main.php)
Особливо варто відзначити деякі параметри, які може приймати даний метод. Розглянемо їх далі
- string $ view - тут все зрозуміло, це ім'я виду, який потрібно рендерить
- array $ data - масив з даними які необхідно передати на вигляд. Зазвичай це дані отримані з моделі
- boolean $ return - результат рендеринга повинен бути повернутий замість того, що відображається для кінцевих користувачів
- boolean $ processOutput - мабуть найцікавіший параметр. Його слід застосовувати в тому випадку, коли необхідно в результаті рендеринга виду також виконати деякі скрипти. Припустимо ми довантажити деяку сторінку Аяксом на якій міститися підключення скрипти через Yii :: app () -> clientScript-> registerScript (). Так ось ці скрипти виконуватися лише в тому випадку, якщо ми встановили $ processOutput в true і дозволили постобработку зареєстрованих клієнтських скриптів. Вони будуть вставлені в відповідних місцях.