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)
- 要在之后立即触发,请使用上面的