val() не вызывает изменения () в jQuery


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

Если вы введете что-то в текстовых полях и нажмите где-то еще, change срабатывает. Однако, если вы нажмете кнопку, значение текстового поля изменится, но change не сработает. Зачем?

7 282

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 функция для запуска изменения, заменив его на прокси-сервер к оригиналу

вам нужно связать метод следующим образом:

$('#input').val('test').change();

нет вам может потребоваться запустить его вручную после установки значения:

$('#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> элементы. Для полей выбора, флажков и переключателей событие запускается немедленно, когда пользователь делает выбор с помощью мыши, но для других типов элементов событие откладывается до тех пор, пока элемент не потеряет фокус.