【问题标题】:Setting focus to next input将焦点设置为下一个输入
【发布时间】:2014-01-17 09:29:06
【问题描述】:

目前我正在创建一个页面。一些输入字段定义了 maxlength,对于这些字段,我希望它们可以在达到 maxlength 时将焦点移动到下一个输入。

这里我有以下代码段:

$("form input[type=text]").on('input',function () 
{
    if($(this).val().length == $(this).attr('maxlength')) 
    {
        $(this).next("input").focus();
    }
});

此代码在 Chrome 和 Firefox 中运行良好,但在 IE 中无法运行。因此,我寻找解决问题的解决方案。有人建议使用 setTimeout() 方法来解决问题。 所以我修改代码如下:

setTimeout(function(){ 
    $("form input[type=text]").on('input',function () 
    {
        if($(this).val().length == $(this).attr('maxlength')) 
        {
            $(this).next("input").focus();
        }
    });
}, 3000);

但是在我的 IE 环境下还是不行。为了解决这个问题,我也尝试过 setInterval() 。两者都无助于解决问题。因此,我想问我如何才能实现我的目标。还是只是因为我错误地使用了 setTimeout() 方法造成的?

【问题讨论】:

标签: javascript jquery html internet-explorer focus


【解决方案1】:

IE8 及以上版本似乎不支持oninput 事件,您可以阅读here

但是你可以替换这一行:

$("form input[type=text]").on('input', function () 

用这个:

$("form input[type=text]").on('keyup paste', function () 

我相信它甚至可以在旧的 Internet Explorer 中工作

编辑

值得注意的是,当paste 事件触发时,文本字段的值不会立即更新。所以你必须等待片刻。代码如下所示:

$("form input[type=text]").on('keyup paste', function () {
  var _this = this;
  setTimeout(function() {
    if($(_this).val().length == $(_this).attr('maxlength')) {
      $(_this).next("input").focus();
    }
  }, 10);  //minimal setTimeout delay
});

setTimeout 回调中this 指的是window 对象,所以你应该“记住”你在_this 变量中的文本字段,然后在回调中使用它

【讨论】:

  • 抱歉回复晚了,我周末很忙。你的解决方法是对的,问题是老版本IE不支持oninput造成的。非常感谢!
【解决方案2】:

对于 IE,你需要使用 settimeout 函数,因为它是惰性的,例如:

 setTimeout(function() { $(this).next("input").focus(); }, 10);

【讨论】:

  • 但在这种情况下 this 将是 window 对象
  • @Zub:我不明白你的意思
  • 试试这个代码:setTimeout(function() {alert(this)}, 10)。你会看到类似的东西:[对象窗口]。但this 应该是文本字段
  • 我根据我阅读的在线参考制作了第二个代码段,但 IE 仍然没有响应我的代码。而且我在setTimeout()/setInterval()里面设置了另外一个函数,所以根据我的理解,子函数里面的this应该是对象触发子函数吧?
  • setTimeout(function() { $(id).next("input").focus(); }, 10);我已经检查过这个工作正常,但是,在移动到下一个输入之前,我仍然需要检查条件。当我添加条件时,它不起作用。
猜你喜欢
  • 1970-01-01
  • 2010-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-18
  • 1970-01-01
  • 1970-01-01
  • 2017-02-10
相关资源
最近更新 更多