К сожалению, нет стандартного события для того, чтобы знать, когда окно выбора закрыто или открыто, поэтому ваш код будет довольно сложным с приспособлениями для разных браузеров.Тем не менее, я думаю, что это можно сделать, и я получил кое-что работающее для вас в Firefox, используя событие mouseup
:
http://jsfiddle.net/FpfnM/50/
в Firefox (и яПредполагается, что Chrome), вам нужно будет тщательно отслеживать состояние этого выбора.При нажатии клавиши escape
или наступлении события blur
необходимо обновить состояние, чтобы идентифицировать его как закрытое.Я не реализовал это в своей демонстрации, и вы можете увидеть, что произойдет, если вы нажмете escape, а не нажмете кнопку выбора.
В Safari все было проще, когда событие mousedown
в выборе означает открытиевыбор и любое закрытие выбора обозначается событием click
.
Если вы найдете браузер, в котором не запускается ни одно из этих событий, вы можете попробовать еще один прием.Поскольку виджеты форм, такие как select и textarea, часто отображаются операционной системой, а не внутри браузера, возможно, вы можете взаимодействовать с ними, и некоторые сообщения могут не попадать в обработчик событий браузера.Если вам нужно расположить прозрачную текстовую область, покрывающую экран, при более низком z-индексе, когда открыто окно выбора, вы можете использовать его для отслеживания этого щелчка.Может быть в состоянии захватить события, которые может пропустить элемент DOM браузера.
Обновление: Chrome видит размыкание при выборе, когда он открывается, и указание мыши на документе при нажатии на страницус открытым выбора.Вот версия, которая работает с Chrome:
http://jsfiddle.net/FpfnM/51/
Опять же, вам нужно будет выполнить некоторое обнаружение браузера, чтобы справиться с правильным поведением каждого из них.В частности, одним из преимуществ Chrome является то, что при повторном нажатии кнопки «Выбрать» событие не запускается.Однако вы можете обнаружить щелчок страницы.
Краткий обзор:
Chrome/Safari: select.mousedown on open, document.mouseup on close
Firefox: select.click on open, document.mouseup on close
IE8/IE7: select.click on open, document.mouseup on close
Существует множество крайних случаев для других событий, которые будут означать закрытие (избегайте нажатия клавиш, размытия и т. д.), но это минимум для обработки сценария, когда пользователь щелкает поле выбора, а затем щелкает в области документа.
Надеюсь, это поможет!