В прошлом я напрямую использовал jquery к событиям. Однако в то время я динамически генерировал элементы DOM, а элементы DOM, которые первоначально существовали на странице для привязки событий. Недавно, когда я проверил динамически сгенерированное событие привязки DOM, я обнаружил, что событие было недействительным, поэтому я проверил его:
1. Причины неудачи события:
(1) Привязка связывающего события действительна только для элементов, присутствующих в DOM. Его нельзя контролировать для элементов, которые мы динамически добавляем позже, поэтому он не может быть связан.
(2) Точно так же, когда вы используете var aa = document.getelementsbytagname («динамический сгенерированный элемент»); Для получения динамически сгенерированных элементов, потому что веб -страница будет выполнять привязку инициализации только один раз, а после этого нельзя контролировать динамически сгенерированные элементы DOM.
2. Решение:
(1) Свяжите больше событий в каждом динамически сгенерированном месте, таких как пример в этом блоге
(2) Изменение привязанна к жизни, потому что живой контроль контролируется в режиме реального времени, а также эффективен для вновь добавленных элементов DOM (поскольку он постоянно является обязательным и суждением, это может повлиять на проблемы с производительностью веб -сайта)
(3) Изменить привязанность к делегированию, потому что делегат контролируется в режиме реального времени.
(4) В jQuery1.7 методы bind (), live () и делегат () были заменены на.
3. Что касается причин недавнего сбоя событий: на исходной веб -странице (код можно увидеть по адресу https://github.com/ufowl/ife/tree/master/stage02/task16), я хочу, чтобы кнопка удаления динамически сгенерировала в таблице, чтобы помочь удалить кнопку «Удалить время удаления», но событие Delete Invalide, потому что Delete Dynamited. При инициализации привязки события кнопка в полученной таблице уже пуста, поэтому связанные элементы всегда пусты, поэтому ответа нет при нажатии кнопки кнопки.
4. Окончательное решение: сначала получите таблицу, затем свяжите событие Table's Click (потому что таблица находится в элементе DOM, который уже существует), а затем захватите цель события (например, нажмите кнопку в таблице. В настоящее время, поскольку кнопка была динамически сгенерирована и добавляет ее в таблицу, кнопка существует.
Примечание: здесь отмечены две проблемы:
(1) Элементы в таблице были добавлены в таблицу, поэтому при нажатии на эту кнопку кнопка, которую вы получаете, - это та, которую вы хотите.
(2) Почему кнопки были добавлены в таблицу, но их все еще нельзя получить? Поскольку кнопки в таблице получаются, когда функция init () инициализация, но в настоящее время операция не выполнялась, поэтому то, что получено, пусто, поэтому элементы не связаны.
Два вопроса, на которые необходимо обратить внимание на вышеуказанное, должны быть четко выделены, и это ключ к проблеме.
5. О связях: после каждого события привязки событие будет связано. Несмотря на то, что и в противном случае событие всегда будет существовать. Так поэтому при работе над проектом иногда результат запроса AJAX будет наложено, как 1, 2, 4, 8. Поскольку при использовании BIND каждое событие запуска будет связано с операцией. Поэтому, когда в первый раз запускается, запрос AJAX будет запрошен один раз; Когда второй раз запускается, запрос Ajax будет 1+1 = 2 раза; В третий раз 1+2+1 = 4 раза; В четвертый раз 1+2+4+1 = 8 раз, и так далее. Поэтому, если вы используете Bind для связывания событий, вы должны сначала раскрыть исходные события элемента, а затем привязать к событиям, чтобы запросы AJAX не вызывали несколько раз.
Приведенная выше статья о причинах и решениях об отказе от динамического генерации инцидента по связыванию DOM является всем контентом, разделенным редактором. Я надеюсь, что это может дать вам ссылку, и я надеюсь, что вы будете поддерживать Wulin.com больше.