jQuery:如何找到第一个可见的输入/ select / textarea不包括按钮?

时间:2010-05-12 23:22:37

标签: jquery input jquery-selectors

我试过

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

但它找不到任何东西。

我的错误是什么?

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>

在调试中我可以看到firstInput是空的。

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

到目前为止,我发现对于某些元素,它确实找到了它们(对于固定的元素),有些则没有。 :(

6 个答案:

答案 0 :(得分:158)

为什么不定位你想要的那些(demo)?

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

修改

或者使用jQuery :input选择器来过滤表单后代。

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

答案 1 :(得分:12)

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/

答案 2 :(得分:6)

这是我对上述内容的总结,对我来说非常适合。感谢您的信息!

<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>

答案 3 :(得分:2)

这是对@ Mottie的回答的改进,因为从jQuery 1.5.2开始class AddAccountNumberToUsers < ActiveRecord::Migration def change add_column :users, :account_number, :string add_index :users, :account_number end end 选择没有指定:text属性的input元素(在这种情况下type 1}}暗示):

type="text"

答案 4 :(得分:0)

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

  • 获取所有输入,选择和textareas
  • 过滤掉所有按钮和隐藏字段
  • 仅过滤启用的可见字段
  • 选择第一个
  • 关注所选字段

代码:

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();
}

然后只需使用您的父元素或选择器调用focusFirst。

选择器:

focusFirst('form#aspnetForm');

元素:

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

答案 5 :(得分:0)

您可以尝试以下代码......

&#13;
&#13;
$(document).ready(function(){
    $('form').find('input[type=text],textarea,select').filter(':visible:first').focus();
})
&#13;
<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>
&#13;
&#13;
&#13;