Подтвердить что ты не робот

Событие изменения триггера, когда входное значение изменилось программно?

У меня есть ввод в моей форме.

<input type="text" id="changeProgramatic" onchange="return ChangeValue(this);"/>

Если я изменю значение в этом текстовом поле (changeProgramatic), используя другую функцию JavaScript, это не вызовет событие изменения. (Примечание: я передаю 'this' в метод)

4b9b3361

Ответ 1

Вы используете jQuery, правильно? Отдельный JavaScript из HTML.

Вы можете использовать trigger или triggerHandler.

var $myInput = $('#changeProgramatic').on('change', ChangeValue);

var anotherFunction = function() {
  $myInput.val('Another value');
  $myInput.trigger('change');
};

Ответ 2

Решение Vanilla JS:

var el = document.getElementById('changeProgramatic');
el.value='New Value'
el.dispatchEvent(new Event('change'));

Обратите внимание, что dispatchEvent не работает в старом IE (см.: caniuse). Таким образом, вы должны использовать его только на внутренних сайтах (не на сайтах с широкой аудиторией) ,

Поэтому, начиная с 2019 года, вы, возможно, захотите убедиться, что ваши клиенты/аудитория не используют Windows XP (да, некоторые все еще используют в 2019 году). Возможно, вы захотите использовать условные комментарии, чтобы предупредить клиентов о том, что вы не поддерживаете старый IE (в данном случае до IE 11).

Ответ 3

Вызов самого обработчика после изменения текста программно:

var input = document.getElementById("changeProgramatic");
input.value = 'New Value';
input.onchange();

Ответ 4

Вы узнаете решение, возможно, это поможет:

В текстовом поле мне нужно использовать функцию bind jQuery. Поэтому, когда вы запускаете, это сработает. У меня возникла проблема, аналогичная вам, и я связываю непосредственно событие, после чего я запускаю это событие, bups, он не будет работать. Поэтому я меняю метод bind на использование bind ( "name-event", function() {}.. и он работает, как я хочу.