大規模なアプリケーションで追跡が難しいバグを、次の最小限の作業例に分離しました。
<html>
<head>
<title>Test page</title>
<script type="text/javascript" language="JavaScript">
function OnClickHandler (t) {
t.disabled = true;
var n = parseInt (t.getAttribute ("num"));
document.body.appendChild (document.createTextNode (
"num = " + t.getAttribute ("num") + ", checked = " + t.checked.toString () + " | "
));
t.setAttribute ("num", n + 1);
t.disabled = false;
}
</script>
</head>
<body>
<input type="checkbox" num="0" onclick="OnClickHandler(this)" />
<br />
</body>
</html>
私が期待しているのは、num
属性の値とチェックボックスのチェックされた状態が完全に同期することです。ただし、この条件は当てはまりません。チェックボックスをすばやくクリックすると表示されます。次に出力例を示します。
入力:2回の非常に速いクリック、短い一時停止、2回の非常に速いクリック、短い一時停止、シングルクリック
num = 0、checked = true | num = 1、checked = true | num = 2、checked = false | num = 3、checked = false | num = 4、checked = true |
ロジックの目的はnum
、チェック状態が変化したときにのみ属性が変化することです。アプリケーションの後続のロジックの多くは、この同期に依存しています。この同期を実装するための推奨される方法は何ですか?
よろしくお願いします。