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 (как вы, вероятно, знаете)

По сути, вам придется делать то, что вы сделали в третьем примере. Я не знаю другого способа достичь этого.

Другие вопросы по тегам