Я пытаюсь вызвать change
событие в текстовом поле, когда я изменяю его значение кнопкой, но это не работает. Проверьте эту скрипку .
Если вы наберете что-то в текстовых полях и нажмете где-нибудь еще, change
срабатывает. Однако, если вы нажмете кнопку, значение текстового поля изменится, но change
не сработает. Зачем?
Ответы:
onchange
срабатывает только тогда, когда пользователь вводит данные, а затем ввод теряет фокус.Вы можете вручную вызвать
onchange
событие, используя после установки значения:Кроме того, вы можете вызвать событие, используя:
источник
.change()
с.val()
методом..val()
в.change()
потому , что они делают входную проверку. Срабатывание.change()
на.val()
вызовет бесконечный цикл.blur
выполнению чего-то подобного:$('#mytext').focus().val('New text').blur();
Из превосходного предложения redsquare, это работает хорошо:
источник
this
:return this.val(v).trigger("change");
Вы можете очень легко переопределить
val
функцию для запуска изменения, заменив ее прокси на исходнуюval
функцию.просто добавьте этот код где-нибудь в вашем документе (после загрузки jQuery)
Рабочий пример: здесь
(Обратите внимание, что это всегда будет срабатывать
change
приval(new_val)
вызове, даже если значение на самом деле не изменилось.)Если вы хотите инициировать изменение ТОЛЬКО, когда значение действительно изменилось, используйте это:
Живой пример для этого: http://jsfiddle.net/5fSmx/1/
источник
.val()
..val()
, внезапно начнет вызывать побочные эффекты :-p.Вам нужно связать метод следующим образом:
источник
Нет, вам может понадобиться запустить его вручную после установки значения:
или:
источник
Похоже, события не кипят. Попробуй это:
Надеюсь, это поможет.
Я попробовал просто старое
$("#mytext").trigger('change')
без сохранения старого значения и.change
запуска, даже если значение не изменилось. Поэтому я сохранил предыдущее значение и вызывал его$("#mytext").trigger('change')
только в том случае, если оно изменилось.источник
По состоянию на февраль 2019 года
.addEventListener()
в настоящее время не работает с jQuery.trigger()
или.change()
, вы можете проверить его ниже, используя Chrome или Firefox.Вы должны использовать
.dispatchEvent()
вместо этого.источник
С https://api.jquery.com/change/ :
change
Событие посылается к элементу , когда изменяется его значение. Это событие ограничено<input>
элементами,<textarea>
ящиками и<select>
элементами. Для полей выбора, флажков и переключателей событие вызывается немедленно, когда пользователь делает выбор с помощью мыши, но для других типов элементов событие откладывается до тех пор, пока элемент не потеряет фокус.источник
Я знаю, что это старая ветка, но для тех, кто ищет, вышеприведенные решения, возможно, не так хороши, как следующие, вместо проверки
change
событий, проверкиinput
событий.источник