Логика в change()
обработчике событий не запускается, когда значение установлено val()
, но она запускается, когда пользователь выбирает значение с помощью мыши. Почему это?
<select id="single">
<option>Single</option>
<option>Single2</option>
</select>
<script>
$(function() {
$(":input#single").change(function() {
/* Logic here does not execute when val() is used */
});
});
$("#single").val("Single2");
</script>
Я считаю, что вы можете вручную вызвать событие изменения с помощью
trigger()
:Хотя почему он не срабатывает автоматически, я понятия не имею.
источник
$('#foo').change(function() { $( this ).val( 'whatever' ); });
Добавление этого фрагмента кода после val (), кажется, работает:
источник
$(":input#single")
. На самом деле вы действительно не должны. Просто зацепи это после.val()
. Вы можете использовать.trigger('change')
или.change()
. Они точно такие же.Насколько я могу прочитать в API. Событие запускается только тогда, когда пользователь нажимает на опцию.
http://api.jquery.com/change/
источник
input
элементов, а не тогда, когда элемент теряет фокус. Ты знаешь?Для упрощения добавьте пользовательскую функцию и вызывайте ее, когда захотите, чтобы изменение значения также вызывало изменение
а также
Или вы можете переопределить функцию val, чтобы всегда вызывать изменение при вызове val
Образец на http://jsfiddle.net/r60bfkub/
источник
change
-event для элемента управления и выполняете обратный вызов, который (прямо или косвенно) снова запускаетchange
-event для того же элемента управления. Я предлагаю вам использовать другое имя для события, которое вы запускаете вручную (напримерexplicit.change
), чтобы оно не повторноchange
запускало -event, предотвращало цикл и все же позволяло вам реагировать на событие.Если вы не хотите смешиваться с событием изменения по умолчанию, вы можете указать свое собственное событие.
чтобы вызвать событие на заданном значении, вы можете сделать
источник
Я столкнулся с той же проблемой при использовании CMB2 с Wordpress и хотел подключиться к событию изменения метабокса загрузки файла.
Поэтому, если вы не можете изменить код, который вызывает изменение (в данном случае сценарий CMB2), используйте код ниже. Триггер вызывается ПОСЛЕ установки значения, в противном случае ваш EventHandler изменения будет работать, но значение будет предыдущим, а не тем, которое установлено.
Вот код, который я использую:
источник
this.selector
внутри переопределяющей$.fn.val
функции для конкретного селектора (будет зависеть от того, что используется для селектора). Это лучшее, что я нашел для этого только для определенных полей, единственная проблема в том, что вы должны знать, что они используют для селектораЭто сработало для моего сценария. У меня есть 3 комбо и связывание с событием chainSelect, мне нужно передать 3 значения по URL и по умолчанию выбрать все выпадающий список. Я использовал это
И первое событие сработало.
источник
Если вы только что добавили опцию выбора в форму и хотите запустить событие изменения, я обнаружил, что требуется setTimeout, иначе jQuery не подхватит вновь добавленное поле выбора:
источник