onchange не работает - PullRequest
       19

onchange не работает

1 голос
/ 27 ноября 2011

Я изучаю JavaScript через книгу серии Head First от O'Reilly media, и я только что дошел до главы, где мне нужно использовать событие onchange.

Я тестирую с использованием Safari / OS X Lion, Firefox, Chrome, Opera и IE / Windows, но получил тот же результат.

Учитывая этот код:

<html>
    <head>
        <title>onChange Test</title>
        <script type="text/javascript">
            function itWorks(){
                alert("it works!");   
            }
        </script>
    </head>
    <body>
        <form>
            <input type="text" onchange="itWorks();" />
            <input type="text" onchange="itWorks();" />
        </form>
    </body>
<html>

Правильно ли говорить, что событие onchange срабатывает всякий раз, когда мы меняем одно поле на другое, активируется ли оно только нажатием или нажатием клавиши TAB?

Ответы [ 5 ]

2 голосов
/ 27 ноября 2011

Событие onchange срабатывает, когда:

  • Фокус покидает поле
  • если значение изменилось с момента получения фокуса

Неважно, как был потерян фокус, и фокус не нужно перемещать в другое поле (может быть ссылка, или в документе ничего не может быть, и т. Д.).

1 голос
/ 27 ноября 2011

"мы переключаемся из одного поля в другое, будь то путем нажатия или с помощью клавиши TAB" -

Thats onblur.

событие, которое вы кодировалисрабатывает всякий раз, когда вы изменяете значение ввода, затем покидаете поле.EG: Введите что-то в поле, затем нажмите клавишу TAB.

Ваш пример кода работает, как и ожидалось.

0 голосов
/ 27 ноября 2011

Это то, что написано в HTML5 спецификации :

Шаги расфокусировки следующие:

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

Расфокусировать элемент.

Запустить простое событие с именем blur в элементе.

Обратите внимание, что change может срабатывать и в другое время. В спецификации также написано :

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

И далее приведем несколько примеров «совершения изменений»

Примером пользовательского интерфейса с действием коммита может быть Файл Элемент управления загрузкой, состоящий из одной кнопки, которая вызывает файл Диалог выбора: когда диалог закрыт, если это файл в результате выбор изменился, после чего пользователь зафиксировал новый файл выбор.

Другим примером пользовательского интерфейса с действием коммита будет Элемент управления датой, который позволяет вводить текстовые данные и выбирать пользователя из раскрывающегося календаря: хотя ввод текста может не иметь явного шаг фиксации, выберите дату в раскрывающемся календаре и затем отклонение выпадающего списка будет коммитом.

0 голосов
/ 27 ноября 2011

"Просто чтобы уточнить, событие onchange срабатывает всякий раз, когда мы меняем одно поле на другое, будь то щелчок или клавиша TAB, верно?"

Да - какпока значение изменилось

Я не уверен, в чем вопрос tbh - ваш код работает!Я проверил это на jsfiddle.net - что отлично подходит для изучения / тестирования javascript.

(вы должны закрыть html-тег между прочим) ...

0 голосов
/ 27 ноября 2011

Поведение, которое вы описали, находится в фокусе.onchange выполняется при изменении значения ввода.Если вы введете что-то в поле, оно должно запуститься.

...