У меня, казалось бы, тривиальная проблема, но я не могу найти причину. Существует минимальная структура html:
<div id="bg">
<div id="panel"></div>
<div id="helper"></div>
</div>
Элемент #helper имеет display: none, и при событии mousedown на #panel я установил dipslay: block на # helper.
Проблема вкратце можно описать так: когда я щелкаю внутри элемента #panel, событие щелчка всегда запускается на элементе #bg, несмотря на все попытки остановить распространение события в обработчиках событий на #panel и #helper. Я сделал код, чтобы проиллюстрировать проблему:
https://codepen.io/tony124/pen/LYpQzwx?editors=1111
, когда я нажимаю за пределами #panel, я получаю в консоли:
"onMouseDownBg" "bg" "bg"
"onMouseUpBg" "bg" "bg"
"onClickBg" "bg" "bg"
, чего и следовало ожидать. Однако, когда я нажимаю на #panel, я получаю
"onMouseDownPanel (stop)" "panel" "panel"
"onMouseUpHelper (stop)" "helper" "helper"
"onClickBg" "bg" "bg"
, что я не могу понять почему. Нет даже лога из onMouseDownBg и noMouseUpBg. Как могло случиться событие щелчка?