我有几行代码试图检测用户与之交互(输入)的最后一个字段。
以下事件处理程序正常运行,但无论用户是否在字段if/else
或#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
”的值)会发生变化!
答案 0 :(得分:1)
您似乎想要使用event.target
代替this
:
var id = event.target.id;
if (id === 'foo') {
// ...
}
答案 1 :(得分:0)
您的测试不能永远不会返回0
,因为您没有任何ID为input1
的输入,并且this
时,具有此ID的div不会是keyup
{1}}事件被提出。
假设您将ID input1
和input2
提供给您的输入,您的代码仍然过于复杂。您不需要localeCompare
来测试字符串相等性。我怀疑当字符串不同时,你没有在true
测试中将结果作为if
传递。你似乎想要
$("#input1, #input2").keyup(function() {
if ("input1"===this.id) {
calculateA();
} else if ("input2"===this.id) {
calculateD();
}
});