我在一个页面上有许多输入,它们具有相同的类并且没有ID
附加到类选择器的绑定事件,如果条件为真则返回焦点。
但是当点击另一个输入时 - 焦点不会返回。
然后想想'因为另一个元素工作模糊,但不知道如何解决这个问题。
<input class="test" value="">
<input class="test" value="">
$(document).ready(function(){
if (condition) {
// return focus - not work
$(".test").blur(function(){
setTimeout(function() {
$(this).focus();
}, 100);
});
}
});
答案 0 :(得分:2)
这里有两个问题。
首先,setTimeout
函数执行后this
现在是window
对象而不是其中一个输入。将引用存储为原始this
,作为模糊处理程序的一部分。
其次,应该移动条件检查。就像现在一样,一旦模糊它就会被迫永远不会离开输入框,因为模糊处理程序已被附加并且始终重新聚焦。我不知道你的condition
是什么,所以我要把它放在setTimeout
回调中。它也可以在创建setTimeout
之前完成。
<强> Here's a verbose demo fiddle of an assumed implementation 即可。以下是一个淡化的例子:
<input class="test" value="">
<input class="test" value="">
$(document).ready(function(){
// return focus - not work
$(".test").blur(function(){
var that = this;
setTimeout(function() {
if (condition) {
$(that).focus();
}
}, 100);
});
});
答案 1 :(得分:0)
条件应该是 模糊事件,请看这个小提琴:http://jsfiddle.net/UudLV/1/
如果输入值为空,它会将焦点返回到最后一个聚焦输入。
$(".test").blur(function() {
if($(this).val().length === 0) { //Your condition, can be anything
$(this).focus(); //Return focus
}
});
将焦点返回到最后一个聚焦元素与选择器无关。 on blur
事件将最后一个聚焦元素作为上下文传递给回调函数,因此this
将是元素。
编辑* 我不完全确定这是OP想要做的事情。