val() не вызывает изменения () в jQuery
Я пытаюсь вызвать change
событие в текстовом поле, когда я изменяю его значение с помощью кнопки, но это не работает. Проверьте эта скрипка.
Если вы введете что-то в текстовых полях и нажмите где-то еще, change
срабатывает. Однако, если вы нажмете кнопку, значение текстового поля изменится, но change
не сработает. Зачем?
7 ответов:
onchange
срабатывает только тогда, когда пользователь вводит данные во вход, а затем вход теряет фокус.вы можете вручную называть
onchange
использование события после установки значения:$("#mytext").change(); // someObject.onchange(); in standard JS
кроме того, вы можете триггер событие:
$("#mytext").trigger("change");
из превосходного предложения redsquare, это прекрасно работает:
$.fn.changeVal = function (v) { return this.val(v).trigger("change"); } $("#my-input").changeVal("Tyrannosaurus Rex");
вы можете очень легко переопределить
val
функция для запуска изменения, заменив его на прокси-сервер к оригиналу
нет вам может потребоваться запустить его вручную после установки значения:
$('#mytext').change();
или:
$('#mytext').trigger('change');
похоже, что события не булькает. Попробуйте это:
$("#mybutton").click(function(){ var oldval=$("#mytext").val(); $("#mytext").val('Changed by button'); var newval=$("#mytext").val(); if (newval != oldval) { $("#mytext").trigger('change'); } });
Я надеюсь, что это помогает.
я попробовал просто
$("#mytext").trigger('change')
без сохранения старого значения, и.change
срабатывает, даже если значение не изменилось. Именно поэтому я сохранил Предыдущее значение и вызвал$("#mytext").trigger('change')
только если он изменится.
от https://api.jquery.com/change/:
The
change
событие отправляется элементу при изменении его значения. Это событие ограничено<input>
элементов<textarea>
ящики и<select>
элементы. Для полей выбора, флажков и переключателей событие запускается немедленно, когда пользователь делает выбор с помощью мыши, но для других типов элементов событие откладывается до тех пор, пока элемент не потеряет фокус.