92

要素のIDを知らなくても、ページの読み込み時に最初の入力要素(テキストボックス、ドロップダウンリストなど)にWebページのフォーカス(入力カーソル)を設定する簡単な方法はありますか?

Webアプリケーションのすべてのページ/フォームに共通のスクリプトとして実装したいと思います。

4

18 に答える 18

149

これは質問には答えませんが (一般的なスクリプトが必要です)、HTML5 が 'autofocus' 属性を導入していることを他の人が知っておくと役立つかもしれません:

<form>
  <input type="text" name="username" autofocus>
  <input type="password" name="password">
  <input type="submit" value="Login">
</form>

詳細については、HTML5を参照してください。

于 2011-06-22T20:49:01.947 に答える
102

jQuery ベースの方法を試すこともできます。

$(document).ready(function() {
    $('form:first *:input[type!=hidden]:first').focus();
});
于 2008-11-10T21:01:23.407 に答える
39
document.forms[0].elements[0].focus();

これは、ループを使用して洗練することができます。特定のタイプのフィールド、無効なフィールドなどにフォーカスしないでください。実際にフォーカスしたいフィールドに class="autofocus" を追加し、その className を探して forms[i].elements[j] をループする方がよいかもしれません。

いずれにせよ、通常、すべてのページでこれを行うことはお勧めできません。入力にフォーカスすると、ユーザーは次のことができなくなります。キーボードからページをスクロールします。予期せぬ場合、これは迷惑になる可能性があるため、フォーム フィールドの使用がユーザーの目的であることが確実な場合にのみ、オート フォーカスを使用してください。すなわち。あなたがGoogleなら。

于 2008-11-10T10:36:45.507 に答える
19

私が機能していることがわかった最も包括的なjQuery式は( over hereの助けを借りて)

$(document).ready(function() {
    $('input:visible:enabled:first').focus();
});
于 2010-04-30T13:33:06.917 に答える
7

Prototype JavaScript フレームワークを使用している場合は、 focusFirstElementメソッドを使用できます。

Form.focusFirstElement(document.forms[0]);
于 2008-11-10T11:14:38.613 に答える
6

役に立つかもしれない記事がここにあります: Set Focus to First Input on Web Page

于 2008-11-10T10:34:10.940 に答える
5

非表示の入力もスキップする必要があります。

for (var i = 0; document.forms[0].elements[i].type == 'hidden'; i++);
document.forms[0].elements[i].focus();
于 2008-11-10T11:01:23.787 に答える
4

私はこれを使用しています:

$("form:first *:input,select,textarea").filter(":not([readonly='readonly']):not([disabled='disabled']):not([type='hidden'])").first().focus();
于 2013-08-21T03:16:53.790 に答える
3

上記の多くの回答を試してみましたが、うまくいきませんでした。http://www.kolodvor.net/2008/01/17/set-focus-on-first-field-with-jquery/#comment-1317でこれを見つけました 。

$("input:text:visible:first").focus();
于 2013-01-25T04:43:26.230 に答える
3

このコードをbodyタグの最後に配置すると、画面上で最初に表示され、非表示ではない有効な要素が自動的にフォーカスされます。それは私が思いつくことができるほとんどのケースを短期間で処理します.

<script>
    (function(){
        var forms = document.forms || [];
        for(var i = 0; i < forms.length; i++){
            for(var j = 0; j < forms[i].length; j++){
                if(!forms[i][j].readonly != undefined && forms[i][j].type != "hidden" && forms[i][j].disabled != true && forms[i][j].style.display != 'none'){
                    forms[i][j].focus();
                    return;
                }
            }
        }
    })();
</script>
于 2008-11-10T12:58:41.303 に答える
2

これは、テキストエリアや選択ボックスを含む、目に見える一般的な入力の最初のものを取得します。これにより、それらが非表示、無効、または読み取り専用ではないことも確認できます。また、ソフトウェアで使用するターゲット div も使用できます (つまり、このフォーム内の最初の入力)。

$("input:visible:enabled:not([readonly]),textarea:visible:enabled:not([readonly]),select:visible:enabled:not([readonly])", 
    target).first().focus();
于 2012-10-23T02:25:21.043 に答える
1

jquery を使用しない場合、たとえば通常の JavaScript を使用する場合:

document.querySelector('form input:not([type=hidden])').focus()

Safari では動作しますが、Chrome 75 では動作しません (2019 年 4 月)

于 2019-04-19T12:28:19.210 に答える
0

AngularJS:

angular.element('#Element')[0].focus();
于 2014-05-08T12:02:54.090 に答える
0

これにはテキストエリアが含まれ、ラジオボタンは除外されます

$(document).ready(function() {
    var first_input = $('input[type=text]:visible:enabled:first, textarea:visible:enabled:first')[0];
    if(first_input != undefined){ first_input.focus(); }
});
于 2014-06-02T11:30:51.057 に答える