Ответ 1
В прошлый раз, когда у меня была эта проблема, в итоге я использовал событие onpropertychange
для Internet Explorer. Я читал об этом здесь, в MSDN: это рекомендуемый способ обойти его.
У меня есть текстовое поле с событием onchange. Почему это событие не срабатывает, когда пользователь использует функцию автозаполнения для заполнения текстового поля?
Я работаю с Internet Explorer. Существует ли стандартное и относительно простое решение этой проблемы, без необходимости отключать функцию автозаполнения?
В прошлый раз, когда у меня была эта проблема, в итоге я использовал событие onpropertychange
для Internet Explorer. Я читал об этом здесь, в MSDN: это рекомендуемый способ обойти его.
Я столкнулся с этой досадной функцией раньше, и мое решение в то время состояло в том, чтобы использовать событие onfocus для записи текущего значения текстового поля, а затем использовать событие onblur, чтобы проверить, соответствует ли текущее значение сохраненному значению во время фокуса. Например
<input type="text" name="txtTest" value="" onfocus="this.originalvalue=this.value" onblur="if (this.value != this.originalvalue) alert('Test has changed')"/>
Основываясь на ответе Тима 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();
})
Я только что обнаружил, что с использованием jQuery 1.4 для установки события изменения может решить эту проблему. Кажется, это самое простое решение этой проблемы, если вы уже знакомы с jQuery.
Я просто выключаю 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>
Я обнаружил, что следующий 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
.