1

私はjavascriptを含むhtmlページを持っています:

<!DOCTYPE html>

    <html>

        <head>
            <script>
                function doWork() {
                     console.log("\tdoWork-start");
                     var now = new Date();
                     var end = now.getTime() + 2000;
                     while(now < end) {
                        now = new Date();
                     }
                     console.log("\tdoWork-end");
                }

                function handleOnClick() {
                    console.log("onclick-start");
                    console.log("onclick-end");
                }

                function handleOnchange() {
                    console.log("onchange-start");
                    window.open('', 'name', 'height=300,width=600,top=200,left=200');
                    doWork();
                    console.log("onchange-end");
                }
            </script>
        </head>

        <body>
            <form>
                <input type="text" onchange="handleOnchange();">
                <input type="button" value="ok" onclick="handleOnClick();">
            </form>

        </body>

    </html>

ユースケース: 入力コントロールに値を入力し、ボタンをすばやくクリックします。コンソールに次のようなログが表示されることを期待しています。

onchange-start
    doWork-start
    doWork-end
onchange-end
onclick-start
onclick-end

しかし、Firefoxには次のものがあります:

onchange-start
onclick-start
onclick-end
    doWork-start
    doWork-end
onchange-end

onclick の実行によって onchange の実​​行が中断されることに注意してください。関数 doWork は、いくつかの長い作業をエミュレートします。Chrome では期待どおりに動作します。

誰がそれがどのように可能かを説明できますか?

4

0 に答える 0