jQuery:ボタンを除く最初に表示される入力/選択/テキスト領域を見つける方法は?


87

私は試した

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

これまでのところ、一部の要素では(固定要素の場合)検出され、一部の要素では検出されないことがわかりました。:(


「:input」の代わりに「input」を試してみませんか?
アレック2010年

正常に動作するはずです。あなたの問題はどこかにあります。あなたはこれを実行していない前に$(document)ありますかready()
BalusC 2010年

検索する特定のHTMLはありますか?
シキ

たぶん最初の入力はtype="hidden"?ページを右クリックしてソースを表示します。生成されたHTMLも重要です。それと適切なSSCCEがなければ、暗闇の中で撮影しています。
BalusC 2010年

回答:


166

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

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

編集

または、jQuery :inputセレクターを使用して、フォームの子孫をフィルター処理します。

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

5
チェックボックス?無線?パスワード?多くの新しいHTML5入力タイプは言うまでもありません。
BalusC 2010年

9
@BalusC $( 'form')。find( ':input')。filter( ':visible:first')
Abe Petrillo 2011

1
これはある程度機能しますが、tabindex属性を無視します。
eoleary 2013年

2
小さな落とし穴ですが便利な追加: ':visible:first'の代わりに ':visible:enabled:first'は、場合によっては上部の要素が無効になり、フォーカスがそこに移動できないため、はるかに優れたフィルターになります。
Prahlad Yeri

1
@PrahladYeriおそらく読み取り専用も除外します':input:visible:enabled:not([readonly]):first'
JustinStolle

13

JQueryコードは問題ありません。ウィンドウロードイベントではなく、readyハンドラーで実行する必要があります。

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


3
@BalusCに感謝します。今から自分を撃ちに行きます。私は自分自身が嫌いです。作業コードをいじらずに、最後の1時間を費やすことができたはずです。犬に餌をやったり、台所を掃除したりすることもできたでしょう。私が達成できたことがたくさんあります。今私が持っているのは痛みだけです。さようなら、永遠に....そして、はい、私は聞くべきでした。
karim79 2010年

@karim:rofl。どういたしまして:)ところで:私はすでに子供たちを入浴させ、ベッドに連れて行き、犬と猫に餌を与え、コカコーラを飲んだ;)
BalusC 2010年

7

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

<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

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

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

1

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

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

コード:

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.