В мое приложение динамически добавляются выпадающие списки. Пользователь может добавить столько, сколько ему нужно.
Я традиционно использовал live()
метод jQuery, чтобы определить, когда редактировался один из этих выпадающих списков change()
:
$('select[name^="income_type_"]').live('change', function() {
alert($(this).val());
});
Начиная с jQuery 1.7, я обновил это до:
$('select[name^="income_type_"]').on('change', function() {
alert($(this).val());
});
Глядя на Документы, это должно быть совершенно правильно (верно?) - но обработчик событий никогда не срабатывает. Конечно, я подтвердил, что jQuery 1.7 загружен и работает и т. Д. В журнале ошибок нет ошибок.
Что я делаю не так? Спасибо!
javascript
jquery
jquery-1.7
разъем
источник
источник
live
на самом деле использует вon
любом случае, так что переписывание унаследованного кода может и не понадобиться, пока неlive
будет удалено, что, как я считаю, составляет 1,9. Выдержка из источника 1.7.1:live: function( types, data, fn ) {jQuery( this.context ).on( types, this.selector, data, fn ); return this;}
так что если кто-то не обновляется до версии, в которойlive
уже нет, обновление может не потребоваться сразу для устаревшего кода. Для нового кода, конечно, используйтеon()
вместо этого, как рекомендуется. Я просто думал, что эта информация может помочь кому-то еще на каком-то этапе.live
наon
.Ответы:
В
on
документации говорится (жирным шрифтом;)):Эквивалентно было
.live()
бы что-то вродеХотя лучше привязать обработчик событий как можно ближе к элементам, то есть к элементу, находящемуся ближе в иерархии.
Обновление: отвечая на другой вопрос, я обнаружил, что это также упоминается в
.live
документации :источник
bind
,live
иdelegate
звонки наon
..live
.on
.on
синтаксис более логичен, так как слушатель фактически привязан к предоставленному вами селектору. Когда событие инициируется, jQuery обходит DOM и выполняет обработчики, где указано (простое делегирование события)..live
предположил, что произошло нечто «волшебное», и было сказано, что он прикрепляет обработчики событий для «будущих элементов», что не совсем верно.В дополнение к выбранному ответу,
Порт
jQuery.live
для JQuery 1.9+ , пока вы ждете вашего приложения к миграции. Добавьте это в свой файл JavaScript.Примечание. Вышеуказанная функция не будет работать в jQuery v3, поскольку
this.selector
она удалена.Или вы можете использовать https://github.com/jquery/jquery-migrate
источник
Просто нашел лучшее решение, которое не включает редактирование стороннего кода:
https://github.com/jquery/jquery-migrate/#readme
Установите пакет jQuery Migrate NuGet в Visual Studio, чтобы устранить все проблемы с версиями. В следующий раз, когда Microsoft обновит свои ненавязчивые модули AJAX и проверки, возможно, попробуйте снова без сценария перенастройки, чтобы увидеть, решили ли они проблему.
Поскольку jQuery Migrate поддерживается jQuery Foundation, я думаю, что это не только лучший подход для сторонних библиотек, но и для получения предупреждений для ваших собственных библиотек с подробным описанием того, как их обновлять.
источник
В дополнение к выбранным ответам,
Если вы используете Visual Studio , вы можете использовать Regex Replace .
В меню «Правка»> «Найти и заменить»> «Заменить в файлах»
или «Ctrl + Shift + H».
Во всплывающем окне «Найти и заменить» установите эти поля
Найти что:
\$\((.*)\)\.live\((.*),
Заменить на:
$(document.body).on($2,$1,
В опциях поиска установите флажок «Использовать регулярные выражения».
источник
JQuery Verision XXXJS открыть редактор, найти
jQuery.fn.extend
добавить код
Пример: jquery-2.1.1.js -> строка 7469 (jQuery.fn.extend)
Пример просмотра изображений
источник