Я понял, что Firefox обрабатывает событие click на теге <select>
иначе, чем Webkit/IE, и я не мог понять, почему и как разрешить эту разницу.
В частности, Webkit/IE рассматривает каждое событие click на <select>
как комбинацию и, нажимая на "select", и щелчок одной из кнопок drop- вниз <option>
, показанный на графиках ниже:
Первый клик:
Второй клик:
В Webkit/IE событие click будет запущено только после того, как оба клика будут выполнены.
Однако в Firefox первый щелчок тега <select>
рассматривается как событие клика, второй щелчок, чтобы выбрать <option>
, рассматривается как еще одно событие клика. Таким образом, два события click были запущены в Firefox по сравнению с одним в Webkit/IE для той же операции.
Теперь, чтобы продемонстрировать это в примере кода, предположим, что у нас есть: (ссылка JSfiddle)
<select id="sel">
<option>one</option>
<option>two</option>
<option>three</option>
</select>
<script>
function select() {
$("#sel").one("click", function(event) {
console.log('mouse down!');
$("#sel").one('click', function() {
console.log('mouse down again!');
$("#sel").off();
select();
});
});
}
$(document).ready(function() {
select();
});
</script>
В Webkit/IE выполнение набора операций, показанных выше на графике (в первый раз), даст результат:
mouse down!
В Firefox это даст:
mouse down!
mouse down again!
Почему это так и как его исправить?
Изменить: я пытался с использованием чистого JavaScript без jQuery, результат остается тем же.
Изменить 2: немного больше контекста, я изначально ответил на этот вопрос: onclick на теге опциона, не работающем на IE и chrome, и выиграл щедрость за мой ответ. Однако, как указывал оп, позже мое решение не работало в Firefox. Я решил углубиться в решение этой проблемы, и, следовательно, этот вопрос был задан, и я вознаграждаю, что 50 из них получили от этого решения. По сути, проблема заключается в создании меню выбора, которое будет вызывать событие всякий раз, когда будет сделан выбор, даже если это то же самое. Это оказалось сложнее, чем ожидалось, если возможно вообще из-за различных реализаций браузера.
Редактировать 3: Я полностью осведомлен о onchange
, но вопрос здесь не о onchange
, если вы внимательно прочитаете. Мне нужно, чтобы каждый триггер события вызывал событие, даже если они являются одним и тем же выбором (который не будет запускать onchange
.