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 :text
select没有指定的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>