2014-02-10 5 views
2

Существует лучшая практика для вызова обработчика изменений JQuery немедленно Afters его определения повторно использовать код и инициализацию GUI, как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 я хотел бы использовать делегирование и делать то же самое, используя API .on().

$("#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(); 

Вопроса: Любой хороший способ решить эту проблему, без повторного выбора элемента и вызывает событие?

+0

Вы можете использовать '.trigger ('change')' [trigger] (https://api.jquery.com/trigger/) – xmarston

+2

@xmarston Вызов '.change()' (без аргументов) вызывает '.trigger ('change') ', поэтому они - одно и то же. –

+0

Попробуйте Realdheeraj

ответ

0

Вы должны найти все элементы и вызвать триггер на них ... Потому что делегаты делегации обращение к какому-либо другому элементу вверх по DOM (как вы, вероятно, знаете)

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

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