0

ユーザーが最後に操作 (入力) したフィールドを検出しようとする数行のコードがあります。

次のイベント ハンドラーは正しく機能しますが、 の最初のケースは、ユーザーがフィールドまたは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' の値) が変わるとは思いもしませんでした!

4

2 に答える 2

1

event.targetの代わりに使用したいようですthis

var id = event.target.id;
if (id === 'foo') { 
   // ...
 }
于 2013-08-29T07:42:03.660 に答える