Можно ли предотвратить, чтобы Chrome вызывал бесконечный цикл при отображении оповещений о событии focus, без отключения и повторного включения события?

#javascript #html #google-chrome #javascript-events

#javascript #HTML #google-chrome #dom-события

Вопрос:

Рассмотрим следующий код. Если я нажимаю cmbMonkeys , это вызывает бесконечный цикл предупреждающих сообщений в Google Chrome. Мой обходной путь для cmbPeople работает нормально. Кто-нибудь знает другой способ предотвратить бесконечные циклы при отображении предупреждений о событиях фокусировки или размытия, без отключения и повторного включения события?

 <html>
<head>
    <script>
        var eventHandler;

        function cmbPeople_OnFocusHandler() {
            alert("focus");
        }

        function cmbPeople_CallFocusHandler(control) {
            eventHandler = control.onfocus;
            control.onfocus = null;
            cmbPeople_OnFocusHandler();
        }

        function cmbPeople_CallBlurHandler(control) {
            control.onfocus = eventHandler;
        }

        function cmbMonkeys_FocusHandler(control) {
            alert("I like monkeys");
        }
    </script>
</head>
<body>
    monkeys <select id="cmbMonkeys" onfocus="cmbMonkeys_FocusHandler(this)"></select>
    people <select id="cmbPeople" onfocus="cmbPeople_CallFocusHandler(this)" onblur="cmbPeople_CallBlurHandler(this)"></select>
</body>
</html>
  

Ответ №1:

Может быть, с помощью простого обработчика состояния?

 var isFocus = false;
function cmbPeople_CallFocusHandler(control) {
    if(!focus){
        focus = true;
        cmbPeople_OnFocusHandler();
    }
}

function cmbPeople_CallBlurHandler(){
    isFocus = false;
}