ユーザーが最後に操作 (入力) したフィールドを検出しようとする数行のコードがあります。
次のイベント ハンドラーは正しく機能しますが、 の最初のケースは、ユーザーがフィールドまたはif/else
にテキストを入力したかどうかに関係なく、常に実行されます。この例で localeCompare の予期しない動作はありますか?#input1
#input2
JS:
$("#input1, #input2").keyup(function () {
if (("input1").localeCompare($(this).attr("id"))) {
calculateA();
} else if (("input2").localeCompare($(this).attr("id"))) {
calculateD();
});
}
HTML:
<div id="input1">
<div class="input-prepend">
<span class="add-on"></span>
<input id="foo" class="span7" type="text">
</div>
<br>
<div class="input-prepend">
<span class="add-on"></span>
<input id="bar" class="span7" type="text">
</div>
</div>
編集:上記のコードが原因でエラーが完全に発生したわけではないことが判明しました。.js
スニペット内の 2 つの比較は、実際にはsetTimeout
コールバック関数の本体でした。そのため、実行コンテキスト (およびその後の ' this
' の値) が変わるとは思いもしませんでした!