jquery tabIndex修复

在我的页面(ASP.NET 3.5)中,所有输入控件都设置了Tab键顺序,只要下一个输入控件未启用或隐藏,它就会转到地址栏然后转到下一个可用控件。 要解决这个问题,即让它登陆到下一个可用的控件w / o去地址栏我试图使用jQuery:

$(':text,textarea,select').blur(function() { $(this).next(':text, textarea, select').filter(':enabled:visible').focus(); }); 

但在某些情况下,它仍然会出现在地址栏中。 我需要在这里纠正什么?

让我先说,我不会这样做,而是使用控件上的tabindex属性来获取所需的Tab键顺序,地址栏只在最后,因为这是用户期望的

话虽这么说,有一种jQuery方式强制你想要的东西,你可以做这样的事情:

 $('form :input:enabled:visible').blur(function() { var con = $(this).closest('form').find(':input:enabled:visible'); var i = con.index(this); setTimeout(function() { con.eq(i == con.length - 1 ? 0 : i + 1).focus(); }, 0); }); 

这改变了一些事情:

  • .next()只查找下一个元素
    • 这将查找

      并获取下一个匹配(将form更改为所有输入的body )。

  • 选项卡到达末尾时需要环绕第一个元素
    • 使用.index()i == con.length - 1 ? 0 : i + 1 i == con.length - 1 ? 0 : i + 1为此
  • 最后,着陆元素的focus事件将此模糊触发(默认情况下)
    • 要在之后立即触发,请使用上面的setTimeout(func, 0)