Если вы установите фокусировку, когда фокус уже установлен, вы можете ожидать срабатывания всех нечетных событий.Эта проблема не относится к Javascript;это происходит на каждом графическом интерфейсе, с которым я когда-либо работал.Вы не можете надежно остановить запуск событий, и вы, вероятно, не получите те же самые в том же порядке, если вы попробуете другой браузер или запустите на другой ОС.
Я всегда использовалпеременная boolean в качестве флага, чтобы указать, что я сам занимаюсь настройкой фокуса, и спокойно возвращаюсь из onblur () и т.п., когда этот флаг установлен.Что-то вроде
var isFocusGettingMessedWith;
...
isFocusGettingMessedWith = true;
someControl.focus();
isFocusGettingMessedWith = false;
...
function someControl_onblur(event) {
if (!isFocusGettingMessedWith) { /* do something */ }
}
function otherControl_onblur(event) {
if (!isFocusGettingMessedWith) { /* do something */ }
}
Этот подход надежно работал на каждой комбинации языка / платформы, где у меня была причина его использовать.