onBlur убивает onClick, но не при использовании setTimeout - PullRequest
2 голосов
/ 18 июня 2011

Если вы поместите курсор на первый вход, а затем нажмите кнопку, вы получите одно сообщение.

Если вы поместите курсор на второй (с setTimeout), вы получите оба сообщения.

Почему сообщение "кнопка была нажата" не отображается в первом сценарии?

И наоборот, что означает setTimeout, который заставляет второе отображать оба предупреждения?

<html>
<head>
  <script type='text/javascript'>
    function testOne() {
      alert('button was clicked');
    }
    function testTwo() {
      alert ('focus left the input');
    }
  </script>
</head>
<body>
  <input name="input1" onblur="testTwo()" />
  <input name="input2" onblur="setTimeout(function(){testTwo();}, 100)" />
  <button name="button1" onclick="testOne()">Button</button>
</body>
</html>

1 Ответ

4 голосов
/ 18 июня 2011

То, что вы думаете, происходит, на самом деле не происходит.

Попробуйте это с console.log (который не блокирует), а не alert (который блокирует), и вы увидите, что оба обработчика событий работают. Ура, еще одна причина презирать alert отладку.

http://jsfiddle.net/mattball/j4cuG/

...