Можно ли предотвратить Chrome, вызывающий бесконечный цикл при отображении предупреждений о событии фокуса, без отключения и повторного включения события? - PullRequest
4 голосов
/ 27 мая 2011

Рассмотрим следующий код. Если я нажимаю в 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 Ответ

4 голосов
/ 27 мая 2011

С простым обработчиком состояний, может быть?

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

function cmbPeople_CallBlurHandler(){
    isFocus = false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...