jquery tabIndex修复

时间:2010-03-19 02:30:37

标签: asp.net jquery

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

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

});  

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

1 个答案:

答案 0 :(得分:1)

让我首先说,我不会这样做,而是使用控件上的tabindex property来获取所需的标签顺序,地址栏只是在最后,因为那是一个什么样的用户期望

话虽如此,有一种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>并获取下一个匹配项(对于所有输入,将form更改为body
  • 当到达结尾时,标签需要环绕到第一个元素
    • 使用.index()i == con.length - 1 ? 0 : i + 1进行此
  • 最后,登陆元素的focus事件会在 之后触发(默认情况下)
    • 之后立即触发
    • 使用上述setTimeout(func, 0)