У меня есть элемент div
, используемый в качестве переключателя, и элемент select
, который должен отображаться / скрываться таким образом:
(1) При нажатии на переключатель, select
должен отображаться и фокусироваться, если он был скрыт
(2) При нажатии на переключатель, select
должен быть скрыт, если он был виден
(3) Когда селектор теряет фокус, он должен быть скрыт.
Теперь есть этот крайний случай, когда select
имеет фокус и пользователь нажимает на переключатель - тогда оба события, onclick
и onblur
, запускаются и отменяют друг другаПо крайней мере, в Firefox:
<div id="toggle">toggle</div>
<div>foobar</div>
<select id="select" multiple>
<option>foo</option>
<option>bar</option>
</select>
document.getElementById('toggle').onclick = function () {
var select = document.getElementById('select');
select.style.display = select.style.display === 'none' ? 'inline' : 'none';
select.focus();
};
document.getElementById('select').onblur = function () {
this.style.display = 'none';
};
https://jsfiddle.net/2wrxykpd/
Я пытался проверить event.explicitOriginalTarget
в функции onblur
(онлайн скрыть select
, если цель onblur
событие не является переключателем), которое будет работать в Firefox, но не в Chrome.
Так что же будет правильным для этого?