Обнаружение изменения состояния переключателя / флажка - PullRequest
5 голосов
/ 10 апреля 2011

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

Сейчас я вижу только два способа сделать это:

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

Что мне здесь не хватает? Есть ли способ надежно определить, что флажок был отмечен / снят?

ОБНОВЛЕНИЕ: Как вы, ребята, отметили, событие изменения действительно запускается для флажков / радиокнопок, несмотря на то, что w3schools говорит, что это только для ввода текста

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

Что я могу сделать в этом случае?

Ответы [ 2 ]

2 голосов
/ 10 апреля 2011

См .: http://www.quirksmode.org/dom/events/change.html.

Это говорит о том, что все основные браузеры поддерживают событие изменения, но реализация IE содержит ошибки.

IE запускает событие, когда флажок или радио размыты, а не когда он активирован.Это серьезная ошибка, которая требует, чтобы пользователь предпринял другое действие, и препятствует согласованному кросс-браузерному интерфейсу, основанному на событии изменения на флажках и радио.,Blur () элементы, когда они сосредоточены!(Используйте что-то вроде $('input[type=radio]').focus(function(){$(this).blur();}); в jQuery или используйте чистый JavaScript)

0 голосов
/ 12 апреля 2011

Хорошо, после некоторого копания вот что я узнал.Обратите внимание, что это применимо к Firefox и, возможно, только к Firefox.Так как в этом случае я имел дело с внутренним приложением, мне этого было достаточно.

Итак, для того, чтобы надежно обнаружил изменения в состоянии флажка / переключателя в Firefox, вам необходимосделать две вещи:

  1. Установить пользовательские обработчики событий Firefox CheckboxStateChange и RadioStateChange для флажков и radiobutton соответственно.Эти события будут вызываться, когда пользователь изменяет входные данные или когда он изменяется через сценарий, используя setAttribute, однако эти события не запускаются, когда состояние изменяется в сценарии, используя свойства checked или selectedвот почему нам нужно ...
  2. Наблюдать за изменениями свойства checked, используя Object.watch

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

Черт, эта штука не работает ...

Если люди заинтересуются, я выложу некоторый код.

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