使用jquery查找下一个最近的可聚焦元素?

我希望我的文本框具有以下function:每次用户按下回车键时,只要可以聚焦,它就会聚焦到下一个最接近的元素(输入,复选框,按钮,收音机,选择,a,div)。 我怎么能用jquery做到这一点?

我之前已经做过了。 在这里尝试我的解决方案http://jsfiddle.net/R8PhF/3/

 $(document).ready(function(){ $('#mytextbox').keyup(function(e){ var code = (e.keyCode ? e.keyCode : e.which); if(code == 13) { var tabables = $("*[tabindex != '-1']:visible"); var index = tabables.index(this); tabables.eq(index + 1).focus(); } }); });​ 

顺便说一句,这是一个合法的技术问题,很可能是一个业务需求。 我被要求将此类行为构建到后台应用程序中。 有许多本机应用程序以这种方式运行。

我通过使用具有contenteditable = true的DIV构建我的表单来满足此要求,如下例所示。

      
explore the world, eg paris, france

您可以捕获ENTER的键事件,并使用JQuery简单地将焦点设置在下一个兄弟上。

如果您需要进一步澄清,请与我们联系。

希望这可以帮助。 祝好运。

算法明智的:

  1. 保留可以聚焦的所有元素的列表。 不要依赖于DOM。 你必须自己保留清单。 如果您不知道页面上有哪些元素,那么您已经做错了。 DOM是一个视图而不是数据存储区 ,因此对其进行处理。 许多使用jQuery的新手犯了这个错误,而使用jQuery这个错误很容易。

  2. 找到页面上所有可聚焦元素的位置。 按照1.最好的方法当然是要知道所有元素的相对位置,即使不看DOM。 使用jQuery,您可以使用.dimension() 。 您可能需要进行一些簿记以使此列表保持最新(即,当您的数据/视图发生更改时)。

  3. 找到当前焦点元素的位置。

  4. 使用一些算法将它与你的其他位置列表进行比较并得到最接近的 (这可能意味着很多事情,你可能知道你想要什么)。

  5. 然后将焦点设置为元素。

你可以在这里做出很多选择,有些选择取决于其他人依赖于交互和界面设计的性能。