web-dev-qa-db-ja.com

jQuery:ボタンを除く最初の目に見える入力/選択/テキストエリアを見つける方法は?

私は試した

$(":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ページにいます。

私はこれまでのところ、いくつかの要素については(固定のものについて)それらを見つけることができ、いくつかのものについては見つけないことを発見しました。 :(

81
Artem

必要なものだけをターゲットにしないのはなぜですか( demo )?

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

編集

または、jQuery :input selectorを使用して、フォームの子孫をフィルタリングします。

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

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/

12

これは上記の私の要約であり、私にとって完璧に機能します。情報をありがとう!

<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>
6
Ben Foster

JQuery 1.5.2以降、:textinput属性が指定されていないtype要素を選択するため、@ Mottieの回答よりも改善されています(この場合、type="text"が暗黙指定されます)。

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

これが私の解決策です。コードは従うのに十分簡単でなければなりませんが、ここにアイデアがあります:

  • すべての入力、選択、およびテキストエリアを取得する
  • すべてのボタンと非表示フィールドを除外する
  • 有効な表示フィールドのみにフィルター
  • 最初のものを選択
  • 選択したフィールドにフォーカスします

コード:

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);
0
J Adam Rogers

以下のコードを試してみてください...

$(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>
0
Mahbub