私は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 では期待どおりに動作します。
誰がそれがどのように可能かを説明できますか?