Как вы и подозревали, события мыши не работают для выбора / параметра в Chrome
Возможные обходные пути:
- Использование прослушивателя onclickкогда выбрана опция.
- Нарисуйте опции, такие как выпадающий список, используя DHTML
- Используйте выбор с атрибутом "size", обычно используемый для множественного выбора.Опции внутри выделения с атрибутом «size» реагируют на события мыши в Chrome.
Я создал пример третьего варианта здесь:
http://jsfiddle.net/SNLzA/
Это клонирует исходный выбор и скрывает клон.Клону присваивается атрибут размера, чтобы он мог реагировать на события мыши.Затем, когда щелкают по исходному выделению, мы временно показываем клон, который был стилизован, чтобы выглядеть как выпадающий список параметров.Затем, когда пользователь щелкает опцию, мы закрываем клон и устанавливаем значение в исходном выборе.Прослушиватель событий щелчка прикреплен к телу, чтобы закрыть клон, когда он недоступен.
HTML
<select id="s">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
CSS
select { display: block; width: 60px; }
JS
var select = document.getElementById("s"),
options = select.getElementsByTagName("option"),
clone = select.cloneNode(true),
body = document.body,
isOpen = false,
closeSelect = function() {
select.removeAttribute("size");
clone.setAttribute("style", "display: none;");
isOpen = false;
select.value = options[clone.selectedInput];
},
openSelect = function(e) {
isOpen = true;
clone.setAttribute("style", "display: auto;");
select.setAttribute("size", options.length);
clone.value = options[select.selectedInput];
};
clone.setAttribute("style", "display: none;");
body.insertBefore(clone, select);
body.addEventListener("click", function(e) {
if (isOpen === true && e.target != select) {
closeSelect();
}
});
select.addEventListener("click", openSelect);
for (i = 0; i < options.length; i++) {
options[i].addEventListener("click", function(e) {
closeSelect();
});
options[i].addEventListener("mouseover", function(e) {
console.log("on option: " + e.target.value);
});
}