0

我有几行代码试图检测用户交互(输入)的最后一个字段。

以下事件处理程序正常运行,但if/else无论用户是否将文本输入到 field#input1#input2. 在这个例子中是否有 localeCompare 的意外行为?

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实际上是setTimeout回调函数的主体;因此,我没有意识到执行上下文(以及随后的 ' this' 的值)会改变!

4

2 回答 2

1

看来您想使用event.target而不是this

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

您测试不能永远返回0,因为您没有任何带有 id 的输入input1,并且具有此 id 的 div 不会thiskeyup引发事件时出现。

假设您提供 idinput1input2输入,您的代码仍然太复杂。您不需要localeCompare测试字符串相等性。而且我怀疑当字符串不同时,您没有像在测试那样通过true结果。你似乎想要if

$("#input1, #input2").keyup(function() {
    if ("input1"===this.id) {
        calculateA();
    } else if ("input2"===this.id) {
        calculateD();
    }
});
于 2013-08-29T07:39:03.050 回答