jQuery . на слушателе события триггера
Рекомендуется немедленно вызывать обработчик изменений jQuery после его определения для повторного использования кода и инициализации графического интерфейса, например
$("#mySelect").change(function() {
$("#myTextField").val( $(this).text());
}).change(); // here the element is immediately triggered, so one does not need a separate code path for the init-case
Без немедленного вызова с использованием .change()
GUI не будет отражать начальное значение #mySelect в #myTextfield.
В более новых версиях jQuery я хотел бы использовать делегирование событий и делать то же самое, используя .on()
API.
$("#myForm").on('change', '#mySelect', function() {
$("#myTextField").val( $(this).text());
}).change();
Это больше не работает, потому что .change()
не запускается в нужном элементе и не в правильном event.target, поэтому jQuery не может вызвать мой обработчик событий.
Это работает, но больше не отражает лучшие практики без отдельного пути кода инициализации:
$("#myForm").on('change', '#mySelect', function() {
$("#myTextField").val( $(this).text());
});
$("#mySelect").change();
Вопрос: Есть ли хороший способ решить эту проблему, не переизбирая элемент и не вызывая событие?
1 ответ
Вам нужно будет найти все элементы и вызвать триггер на них... Поскольку делегирование делегирует обработку некоторому другому элементу в DOM (как вы, вероятно, знаете)
По сути, вам придется делать то, что вы сделали в третьем примере. Я не знаю другого способа достичь этого.