Событие Blur, похоже, теряется, если событие mousedown, происходящее до этого, задерживает его - PullRequest
3 голосов
/ 27 апреля 2020

Вот код:

<input type="text" onblur="myFunction()">
<div style="border: 1px solid; width:300px;height:300px" onmousedown = "myOtherFunction()">


function myOtherFunction(){
  console.log("mousedown on div occurred");
}

function myFunction(){
  console.log("blurr occurred");
}

Это работает, как и ожидалось, если я наберу что-то во вводе и нажму на div, вызывая mousedown перед blur. Однако если я просто включу отладчик в myOtherFunction и открою инструмент разработчика, событие blur не будет запущено и, похоже, будет потеряно. Возможно ли это из-за «задержки», которая происходит, когда отладчик включен?

https://jsbin.com/qevapocovo/edit?html, js, консоль, выход

1 Ответ

0 голосов
/ 08 мая 2020

На самом деле это проблема отладчика на Chrome: если вы заметили мою запись , вы увидите, что я нажимаю кнопку «воспроизведение», которая появляется внутри веб-приложения, а в ваша запись Вы нажимаете кнопку «Play» на отладчике, который находится на вкладке инструментов разработчика. Можете ли вы щелкнуть внутриигровое «воспроизведение», которое появляется при посещении точки останова, и проверить, работает ли оно должным образом?

РЕДАКТИРОВАТЬ: Я создал файл html для запуска непосредственно на Chrome с тем же кодом, и проблема сохраняется:

function myOtherFunction(){
  debugger
  console.log("mousedown on div occurred")
  alert("mousedown on div occurred")
}

function myFunction(){
  console.log("blurr occurred")
  alert("blurr occurred")
}
<input type="text" onblur="myFunction()">
<div style="border: 1px solid; width:300px;height:300px" onmousedown = "myOtherFunction()"></div>

Я также попробовал его в Safari и работал правильно.

...