Отключенный элемент формы и проблема oncontextmenu - PullRequest
1 голос
/ 10 ноября 2010

у нас есть проблема, когда отключенный элемент формы (input, textarea, ...) не реагирует на действие щелчка правой кнопкой мыши (атрибут oncontextmenu).Все работает нормально, когда элемент формы включен.Пожалуйста, обратите внимание на следующий псевдокод:

<div id="test" oncontextmenu="someFunction()">
  <input id="textbox" type="text" disabled="disabled">
  SOME_PADDING
  <input id="calendar" type="image" disabled="disabled">
</div>

Суть в том, что не работает в Chrome и Firefox, но работает в IE8 и Opera,

Когда мы щелкаем правой кнопкой мыши по элементам текстового поля или календаря в Chrome или Firefox, ничего не происходит.Если мы нажмем между элементами (SOME_PADDING) , тогда появится меню, вызываемое правой кнопкой мыши.

Следовательно, похоже, что действие , щелкнув правой кнопкой мыши по отключенной форме, не работает в Chrome и Firefox .Кто-нибудь сталкивался с подобным поведением раньше?

Заранее спасибо!
Stijn

РЕДАКТИРОВАТЬ: Как упоминалось Pekka, отключенный элемент формы, не реагирующий на щелчок правой кнопкой мыши, имеет смысл.По-видимому, реальная проблема заключается в том, что атрибут oncontextmenu окружающего его div не реагирует должным образом при нажатии на отключенный элемент формы в Firefox / Chrome.

РЕДАКТИРОВАТЬ2: Пример онлайн можно найти здесь: http://jsbin.com/isite4/6 - Это работает во всех, кроме IE8.Любые предлагаемые обходные пути, чтобы заставить IE вести себя нормально?

Ответы [ 3 ]

3 голосов
/ 10 ноября 2010

Хмммм, интересно. Никогда не видел этого раньше. Можно утверждать, что скрывать контекстное меню не совсем неправильно . W3C имеет следующее , чтобы сказать об отключенных элементах управления:

  • Отключенные элементы управления не получают фокус.
  • Отключенные элементы управления пропускаются при навигации по вкладкам.
  • Отключенные элементы управления не могут быть успешными.

и о получении фокуса:

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

Таким образом, поведение, показанное Chrome и FF, имеет смысл IMO.

Идеи как обойти это:

  • Поместите прозрачный элемент поверх элемента ввода и поймайте событие там (гадость)

  • Используйте z-index: -1, чтобы поместить отключенный элемент за контейнером - не уверен, работает ли он в разных браузерах, хотя

  • Не работать с атрибутом disabled, но использовать стиль CSS и обходной путь jQuery, чтобы предотвратить отправку значений этих элементов управления

Последнее было бы лучшим предложением, я думаю.

1 голос
/ 24 ноября 2010

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

0 голосов
/ 06 января 2014

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

...