2

最初の入力にカーソルを置いてボタンをクリックすると、1 つのメッセージが表示されます。

カーソルを 2 番目のメッセージ ( を使用setTimeout) に置くと、両方のメッセージが表示されます。

最初のシナリオで「ボタンがクリックされました」というメッセージが表示されないのはなぜですか?

逆に、setTimeout2 番目のアラートが両方のアラートを表示する原因は何ですか?

<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>
4

1 に答える 1

4

起こっていると思っていることは、実際には起こっていません。

console.log(ブロックする) ではなく (ブロックしない) で試してみるとalert、両方のイベント ハンドラーが実行されることがわかります。alert万歳、デバッグを軽視するもう 1 つの理由。

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

于 2011-06-17T21:27:34.860 に答える