Вы не используете .on()
правильно.Это лучшая реализация, если объект #who_me
приходит и уходит.
jQuery(document.body).on('click', '#who_me', function(){
alert('test123');
return false;
});
Селектор, который вы используете в объекте jQuery для .on()
, должен быть объектом, который присутствует во время установки событияобработчик и никогда не удаляется и не воссоздается; это либо объект, на который вы хотите установить событие, либо родительский объект этого объекта.Селектор, передаваемый в качестве второго аргумента .on()
, является необязательным селектором, который соответствует объекту, для которого вы хотите событие.Если вам нужно поведение типа .live()
, то вы должны передать статический родительский объект в объект jQuery и селектор, который соответствует фактическому объекту, для которого вы хотите событие, во втором аргументе.
В идеале вы должны поместитьродительский объект в объекте jQuery, который находится относительно близко к динамическому объекту.Я показал document.body
только потому, что знаю, что это сработает, и не знаю остальную часть вашего HTML, но вы бы предпочли приблизить его к реальному объекту.Если вы поместите слишком много динамических обработчиков событий на объект document
или document.body
, то обработка событий может действительно замедлиться, особенно если у вас есть сложные селекторы или обработчики для частых событий, таких как щелчок или перемещение мыши.
Для справки, 100% эквивалентный вашему .live()
коду:
jQuery(document).on('click', '#who_me', function(){
alert('test123');
return false;
});
.live()
просто устанавливает все свои обработчики событий на объект документа и использует всплывающее окно для просмотра всех происходящих событий.на других объектах на странице.jQuery устарел .live()
, потому что лучше НЕ устанавливать все ваши обработчики событий в реальном времени на объект документа (из соображений производительности).Итак, выберите статический родительский объект, который находится ближе к вашему объекту.