Когда события изменения textarea не запускаются?

Я полагаюсь на событие изменения, которое запускается всякий раз, когда изменяется содержимое текстовой области. Согласно документам jquery, это не сработает, пока текстовая область не потеряет фокус. При каких обстоятельствах событие не может быть инициировано? Будет ли пересечение страницы, возврат назад, нажатие на ссылку и т. Д. Всегда приводить к потере фокуса текстовой области и увольнению?

Или, другими словами, возможно ли оставить страницу без текстовой области фокусов, теряющей ввод?

5 ответов

Решение

При использовании разных тестов событие изменения не запускается, когда:

  • пользователь нажимает на любую кнопку браузера (кнопка "Назад", кнопка "Обновить", кнопка "Домой"...) (Chrome, Firefox и Opera в Linux, но срабатывает при нажатии на адресную строку)
  • пользователь использует ярлыки (f5, ctrl + u...) (проверено на Chrome + Firefox + Opera).

Вы можете проверить пример здесь: http://jsfiddle.net/Atinux/S6TkP/

Поэтому я рекомендую вам дополнительно использовать события keyUp и keyDown в ваших формах ввода и текстовой области.

Я бы пошел к определению события W3c.

[Http://www.w3.org/TR/DOM-Level-2-Events/events.html][1]

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

  • Пузыри: да
  • Отменяемый: Нет
  • Контекстная информация: Нет

Каждый раз, когда он теряет фокус, его следует уволить.

В Safari и Chrome каждый раз, когда вы меняете текст, происходит событие CHANGE. Однако, если вы удалите весь текст, событие CHANGE больше не будет срабатывать. Это ошибка. Вот почему люди используют события KEYPRESS в качестве обходного пути

Лучше использовать событие keyUp/keyDown, потому что событие change срабатывает только тогда, когда текстовое поле / ввод были изменены, а элемент потерял фокус.

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

Если вы хотите иметь возможность отслеживать изменения в textarea более надежно, вам лучше слушать keypress событие.

Другие вопросы по тегам