0

我在一页上有许多输入,它们具有相同的类并且没有 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);
    });
   }
});
4

2 回答 2

2

这里有两个问题。

首先,一旦setTimeout函数执行this,现在就是window对象而不是输入之一。将原始引用存储this为模糊处理程序的一部分。

其次,条件检查应该移动。就目前而言,一旦模糊输入框,您将被迫永远不要离开输入框,因为模糊处理程序已附加并始终重新聚焦。我不知道你condition是什么所以我要把它放在setTimeout回调中。它也可以在setTimeout创建之前进行。

这是假定实现的详细演示小提琴。下面是一个淡化的例子:

<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);
    });
});
于 2013-09-05T13:56:55.033 回答
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 想要做的。

于 2013-09-05T14:01:42.857 回答