jQuery:如何find第一个可见的input/select/文本区域排除button?

我试过了

$(":input:not(input[type=button],input[type=submit],button):visible:first") 

但是没有find任何东西。

我的错误是什么?

UPD:我执行$(document).load()

 <script type="text/javascript"> $(window).load(function () { var aspForm = $("form#aspnetForm"); var firstInput = $(":input:not(input[type=button],input[type=submit],button):visible:first", aspForm); firstInput.focus(); }); </script> 

并在debugging中,我可以看到firstInput是空的。

UPD2:我在ASP.NET页面下运行Sharepoint。

我发现迄今为止,对于某些元素,它确实find了它们(对于固定的),而对于一些则没有。 🙁

为什么不只是瞄准你想要的( 演示 )?

 $('form').find('input[type=text],textarea,select').filter(':visible:first'); 

编辑

或者使用jQuery :inputselect器来过滤表单后代。

 $('form').find('*').filter(':input:visible:first'); 

JQuery代码很好。 您必须在准备处理程序中执行而不是在窗口加载事件中。

 <script type="text/javascript"> $(function(){ var aspForm = $("form#aspnetForm"); var firstInput = $(":input:not(input[type=button],input[type=submit],button):visible:first", aspForm); firstInput.focus(); }); </script> 

更新

我试着用Karim79的例子(谢谢你的例子),它工作正常: http : //jsfiddle.net/2sMfU/

这是我上面的总结,完美的为我工作。 谢谢(你的)信息!

 <script language='javascript' type='text/javascript'> $(document).ready(function () { var firstInput = $('form').find('input[type=text],input[type=password],input[type=radio],input[type=checkbox],textarea,select').filter(':visible:first'); if (firstInput != null) { firstInput.focus(); } }); </script> 

这是@ Mottie的答案,因为从jQuery 1.5.2 :textselect没有指定的type属性(在这种情况下, type="text"隐含)的input元素的改进:

 $('form').find(':text,textarea,select').filter(':visible:first') 

这是我的解决scheme。 代码应该很容易遵循,但这里是这样的想法:

  • 获取所有input,select和textareas
  • 过滤掉所有的button和隐藏的字段
  • 过滤到只有启用,可见的领域
  • select第一个
  • 集中select的字段

代码:

 function focusFirst(parent) { $(parent).find('input, textarea, select') .not('input[type=hidden],input[type=button],input[type=submit],input[type=reset],input[type=image],button') .filter(':enabled:visible:first') .focus(); } 

然后,只需使用父元素或select器调用focusFirst。

select:

 focusFirst('form#aspnetForm'); 

元件:

 var el = $('form#aspnetForm'); focusFirst(el); 

你可以尝试下面的代码…

 $(document).ready(function(){ $('form').find('input[type=text],textarea,select').filter(':visible:first').focus(); }) 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> <form> <input type="text" /> <input type="text" /> <input type="text" /> <input type="text" /> <input type="text" /> <input type="submit" /> </form>