имею код

Выделить код

Код:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>TestDate</title>
</head>
<body>
    <button>asdsa</button>
    <input id="input" type="text" value="sdasd">
    </input>
    <script type="text/javascript">
        var input = document.getElementById("input");
        input.addEventListener('blur', function() {
            alert('onblur');
            return true;
        }, false);
        input.addEventListener('focus', function() {
            alert('onfocus');
            return true;
        }, false);
        input.addEventListener('change', function() {
            alert('onchange');
            return true;
        }, false);
    </script>
</body>
</html>

При нажатии на текстовое поле сначала вызывается onblur, потом onfocus. Само поле при этом фокус не получает, следовательно onchange вообще не вызовется. Также эти дейсвия работают при нажначении их как аттрибутов тэга. Из дополнений установлен яндекс-бар, firebug, web developer, переводчик tran. Перезапускал с отключенными дополнениями - результат тот же.

Смешивать focus, blur и alert, неудачная идея. Так можно до посинения выяснять что за чем следует.
Сделайте лучше console.log

в том то и дело, что при console.log() всё нормально работает, но вот какая то нелогичность получается при вызове alert(): когда элемент теряет фокус прежде чем его получит

Тема перенесена из форума «Поддержка пользователей» в форум «Разработка».

Ну может быть нелогично, но зачем вообще может понадобиться показывать алерт на фокус и какая в таком случае разница что за чем следует…

nk
Здесь последовательность входов-выходов из обработчиков, и передача фокуса алерту при его (алерте) возникновении формирует своеобразный стек:

Выделить код

Код:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>TestDate</title>
</head>
<body>
    <button>asdsa</button>
    <input id="input" type="text" value="sdasd">
    </input>
    <script type="text/javascript">
        var input = document.getElementById("input");
        input.addEventListener('blur', function() {
          try
          {
            console.log("onblur enter");
            alert('onblur');
            return true;
          }
          finally
          {
            console.log("onblur exit");
          }
        }, false);
        input.addEventListener('focus', function() {
          try
          {
            console.log("onfocus enter");
            alert('onfocus');
            return true;
          }
          finally
          {
            console.log("onfocus exit");
          }
        }, false);
        input.addEventListener('change', function() {
                console.log("onchange");
            alert('onchange');
            return true;
        }, false);
    </script>
</body>
</html>

Последовательность:

onfocus enter

(обработчик срабатывает, вызывает алерт, из-за чего фокус сразу же теряется)

onblur enter

(обработчик срабатывает, вызывает алерт - onfocus из-за модальности алерта ждет. Закрываем алерт)

oblur exit

(управление возвращается в onfocus, выпускает алерт на onfocus)

onfocus exit