У меня была похожая проблема с полосой прокрутки в выпадающем меню автозаполнения. Поскольку выпадающий список должен быть скрыт, когда элемент формы, к которому он присоединен, теряет фокус, поддержание фокуса на правильном элементе стало проблемой. При нажатии на полосу прокрутки только Firefox (10.0) продолжал фокусироваться на элементе ввода. IE (8.0), Opera (11.61), Chrome (17.0) и Safari (5.1) все удалили фокус со ввода, в результате чего раскрывающийся список был скрыт, а поскольку он был скрыт, события щелчка не будут срабатывать в раскрывающемся списке.
К счастью, смещение фокуса можно легко предотвратить в большинстве проблемных браузеров. Это делается путем отмены действия браузера по умолчанию:
dropdown.onmousedown = function(event) {
// Do stuff
return false;
}
Добавление возвращаемого значения в обработчик событий решило проблему во всех браузерах, кроме IE. Это отменяет действие браузера по умолчанию, в этом случае смещение фокуса. Кроме того, использование mousedown вместо click означало, что обработчик событий будет выполнен до того, как событие размытия будет запущено для элемента ввода.
Это оставило IE как единственную оставшуюся проблему (нет ничего удивительного). Оказывается, нет способа отменить смещение фокуса на IE. К счастью, IE - единственный браузер, который запускает событие фокуса в раскрывающемся списке, а это означает, что фокус на элементе ввода можно восстановить с помощью обработчика событий, эксклюзивного для IE:
dropdown.onfocus = function() {
input.focus();
}
Это решение для IE не является идеальным, но хотя смещение фокуса не может быть отменено, это лучшее, что вы можете сделать. Что происходит, так это то, что событие размытия срабатывает на входе, скрывая раскрывающийся список, после чего фокус срабатывает на скрытом раскрывающемся раскрытии, который восстанавливает фокус на входе и вызывает показ раскрывающегося списка. В моем коде это также вызывает повторное заполнение раскрывающегося списка, что приводит к небольшой задержке и потере выбора, но если пользователь хочет прокрутить выбор, в любом случае, вероятно, бесполезен, поэтому я счел это приемлемым.
Надеюсь, это полезно, хотя мой пример немного отличается от приведенного в вопросе. Из того, что я понял, вопрос был о том, что IE запускает событие размытия в самом раскрывающемся меню, а не в открывшей его кнопке, что для меня не имеет смысла ... Как показывает использование мной обработчика события фокуса, нажатие на полосу прокрутки следует переместить фокус на элемент, частью которого является полоса прокрутки в IE.