Почему не происходит событие onchange javascript onchange, если включено автозаполнение? - PullRequest
27 голосов
/ 05 декабря 2008

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

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

Ответы [ 6 ]

17 голосов
/ 05 декабря 2008

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

12 голосов
/ 05 декабря 2008

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

<input type="text" name="txtTest" value="" onfocus="this.originalvalue=this.value" onblur="if (this.value != this.originalvalue) alert('Test has changed')"/>
6 голосов
/ 24 ноября 2011

Основываясь на ответе Тима С, вот простой 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();
})
4 голосов
/ 08 марта 2010

Я только что обнаружил, что с помощью jQuery 1.4 для установки события изменения может решить эту проблему. Кажется, самое простое решение этой проблемы, если вы уже знакомы с jQuery.

2 голосов
/ 10 декабря 2009

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

'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>
1 голос
/ 19 апреля 2014

Я обнаружил, что следующий 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 вашего текстового поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...