2013-11-17 3 views
1

У меня есть много сценариев jquery, которые не обрабатывают элементы, загружаемые или созданные на лету, конечно, я могу преобразовать все свои записи и добавить их .live(). Однако задавалось вопросом, есть ли какой-либо вариант или трюк, который мог бы автоматически имитировать живую функцию во всех сценариях, не изменяя их один за другим вручную.конвертировать все сценарии jquery в live-скрипты

Благодарим за комментарии, вживую обесценивается, поэтому я повторяю свой вопрос с помощью функции .on().

+4

Вы должны начать с изучения первых, метод живой() уже давно устарела и удалено, так что это не вариант. – adeneo

+0

'live' отменен. Вам нужно использовать 'on' с селектором делегатов. –

+0

Так оно может быть выполнено автоматически?(без on?) – user2990361

ответ

2

Существует не один трюк, который заставит весь существующий код обработчика событий работать с динамически загружаемыми элементами без обновления каждого обработчика событий, если вы не захотите заменить некоторые методы jQuery на методы, которые работают иначе, чем jQuery задокументированы (не рекомендуется). Вам придется заменить все методы обработки событий jQuery, которые вы используете в настоящее время, с методами, которые вынуждали делегировать обработку событий в них. Это было бы плохой способ сделать это. Вы не только взломали jQuery во что-то, что было бы иначе, чем документировано, и открыли себе проблемы с совместимостью с другим кодом, но вы были бы вынуждены использовать неэффективное использование делегированной обработки событий (поэтому .live() был удален в первую очередь). Не делай это. Исправьте свой код, чтобы использовать надлежащий метод делегированной обработки событий. Это совсем не сложно.


.live() устарели и даже удален из последних версий JQuery. Вы не должны его использовать. Существует форма .on(), которая позволит вам использовать делегированную обработку событий для динамически загружаемых объектов. Вы можете увидеть, как использовать соответствующую форму .on() для динамически загружаемых элементов в этом сообщении: jQuery .live() vs .on() method for adding a click event after loading dynamic html.

«Правильный» способ использования .on() для динамических элементов, как это:

$('#parent').on("click", "#child", function() {}); 

где Вы можете выбрать ближайший родительский для динамического элемента, который сам по себе не динамически загружаемой и привязать обработчик событий к этому элементу ,


.live() был удален, поскольку он положил все делегированные обработчик событий на document объекта несколько аналогичного этому:

$(document).on("click", "#child", function() {}); 

Если, однако, вы использовали ряд делегированных обработчиков событий, как это, производительность может начинают бояться. Это связано с тем, что, когда вы делаете это так, и вы щелкаете в любом месте документа, и этот клик пузырится до документа, он должен сравнивать каждый отдельный селектор в каждом обработчике событий .live(), который у вас был с текущим объектом. Так как селекторные сравнения не всегда бывают быстрыми, это может действительно испортить обработку событий.

Когда вы размещаете обработчик событий на объекте, близком к реальному объекту, вы оказываетесь с обработчиками далеких событий, и тем более меньшее количество селекторов для сравнения и обработки событий работает быстрее.


Вот ссылка на некоторые различия между статическими обработчиков событий и делегированных обработчиков событий и некоторые полезные заметки о них: JQuery Event Handlers - What's the "Best" method

+0

Спасибо за отличный ответ! он выполнил больше вопросов, которые я имел в виду! – user2990361

Смежные вопросы