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