使用具有相同类的输入重新关注模糊

时间:2013-09-05 13:47:45

标签: javascript jquery

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

2 个答案:

答案 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想要做的事情。