Почему событие javascript onchange не срабатывает, если включена автозаполнение?

У меня есть текстовое поле с событием onchange. Почему это событие не срабатывает, когда пользователь использует функцию автозаполнения для заполнения текстового поля?

Я работаю с Internet Explorer. Существует ли стандартное и относительно простое решение этой проблемы, без необходимости отключать функцию автозаполнения?

Ответ 1

В прошлый раз, когда у меня была эта проблема, в итоге я использовал событие onpropertychange для Internet Explorer. Я читал об этом здесь, в MSDN: это рекомендуемый способ обойти его.

Ответ 2

Я столкнулся с этой досадной функцией раньше, и мое решение в то время состояло в том, чтобы использовать событие onfocus для записи текущего значения текстового поля, а затем использовать событие onblur, чтобы проверить, соответствует ли текущее значение сохраненному значению во время фокуса. Например

<input type="text" name="txtTest" value="" onfocus="this.originalvalue=this.value" onblur="if (this.value != this.originalvalue) alert('Test has changed')"/>

Ответ 3

Основываясь на ответе Тима C, вот простой jquery, с которым я столкнулся, чтобы обработать это для всех текстовых полей на странице:

$("input[type=text]").bind("focus change",function(){
    this.previousvalue = this.value;
}).blur(function(){
    if (this.previousvalue != this.value){
        $(this).change();
    }
})

Если вы не заботитесь об однократном запуске, вы можете сделать это проще:

$("input[type=text]").blur(function(){
    $(this).change();
})

Ответ 5

Я просто выключаю Autocomplete для текстовых полей, необходимых для запуска события смены текста

'Turn off Auto complete 
'(it needs to fire the text change event)
 txtYourTextBox.Attributes.Add("AutoComplete", "off")

Просто поставьте это на загрузку страницы.

В качестве альтернативы вы можете добавить атрибут в свою разметку в элементе input или в целом form:

<input type=text autocomplete=off>

или

<form autocomplete=off>

Ответ 6

Я обнаружил, что следующий jQuery (v1.10 +) JavaScript работает в случае автоматического завершения текста для полей ввода текста HTML. Это было проверено для надежной работы, по крайней мере, в Safari 6.1.1 в Mac OS X 10.8.5, но также должно работать и в других совместимых браузерах:

$("input:text[id=text_field_id]").bind("focus change keyup blur", function(event) {
// handle text change here...
});

Казалось, добавление обработчика событий blur было ключом к выполнению этой работы, хотя другие обработчики событий помогают гарантировать, что обработчик события вызывается в любое время, когда текст изменяется, будь то из-за редактирования или нового ввода функция автозаполнения браузера.

Просто замените приведенный выше код "input:text[id=text_field_id]" соответствующим селектором для нужного текстового поля ввода или если атрибут id ссылается на ваше поле, замените text_field_id на значение атрибута текстового поля id.