要素のIDを知らなくても、ページの読み込み時に最初の入力要素(テキストボックス、ドロップダウンリストなど)にWebページのフォーカス(入力カーソル)を設定する簡単な方法はありますか?
Webアプリケーションのすべてのページ/フォームに共通のスクリプトとして実装したいと思います。
要素のIDを知らなくても、ページの読み込み時に最初の入力要素(テキストボックス、ドロップダウンリストなど)にWebページのフォーカス(入力カーソル)を設定する簡単な方法はありますか?
Webアプリケーションのすべてのページ/フォームに共通のスクリプトとして実装したいと思います。
回答:
jQueryベースの方法を試すこともできます。
$(document).ready(function() {
$('form:first *:input[type!=hidden]:first').focus();
});
これは質問に答えませんが(共通のスクリプトが必要です)、HTML5が「autofocus」属性を導入していることを他の人が知っていると便利かもしれません。
<form>
<input type="text" name="username" autofocus>
<input type="password" name="password">
<input type="submit" value="Login">
</form>
HTML5に飛び込むには、より多くの情報があります。
autofocus
値を付けずに使用しようとすると、Springアプリが壊れますspring:form
。autofocus="autofocus"
ただし、正常に動作します。ありがとう、@ジェイコブ。
document.forms[0].elements[0].focus();
これは、たとえば、ループを使用して調整できます。特定の種類のフィールド、無効なフィールドなどに焦点を当てないでください。実際にフォーカスしたいフィールドにclass = "autofocus"を追加し、forms [i] .elements [j]をループしてそのclassNameを探す方がよいでしょう。
とにかく:通常、すべてのページでこれを行うことはお勧めできません。入力に焦点を合わせると、ユーザーは次のような機能を失います。キーボードからページをスクロールします。予期しない場合、これは煩わしい可能性があるため、フォームフィールドの使用がユーザーの希望どおりになることが確実な場合にのみ、オートフォーカスを実行してください。すなわち。あなたがグーグルなら。
あなたが使用している場合はプロトタイプのJavaScriptフレームワークを、あなたが使用することができますfocusFirstElement方法:
Form.focusFirstElement(document.forms[0]);
ここに役立つかもしれない記事があります:Webページの最初の入力にフォーカスを設定します
また、非表示の入力をスキップする必要があります。
for (var i = 0; document.forms[0].elements[i].type == 'hidden'; i++);
document.forms[0].elements[i].focus();
while
ステートメントを使用できるのに、なぜメモリを浪費するのですか?
このコードを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>
私はこれを使用しています:
$("form:first *:input,select,textarea").filter(":not([readonly='readonly']):not([disabled='disabled']):not([type='hidden'])").first().focus();
これにより、textareasやselectボックスなど、表示されている一般的な入力の最初のものが取得されます。これにより、それらが非表示、無効化、または読み取り専用にならないようにすることもできます。また、ソフトウェアで使用するターゲットdiv(つまり、このフォーム内の最初の入力)も可能になります。
$("input:visible:enabled:not([readonly]),textarea:visible:enabled:not([readonly]),select:visible:enabled:not([readonly])",
target).first().focus();
これにはtextareasが含まれ、ラジオボタンは除外されます
$(document).ready(function() {
var first_input = $('input[type=text]:visible:enabled:first, textarea:visible:enabled:first')[0];
if(first_input != undefined){ first_input.focus(); }
});
親がこの要素を非表示にしている可能性があるため、display属性をチェックする代わりにclientHeightを使用できるはずです。
function setFocus() {
var forms = document.forms || [];
for (var i = 0; i < forms.length; i++) {
for (var j = 0; j < forms[i].length; j++) {
var widget = forms[i][j];
if ((widget && widget.domNode && widget.domNode.clientHeight > 0) && typeof widget.focus === "function")
&& (typeof widget.disabled === "undefined" || widget.disabled === false)
&& (typeof widget.readOnly === "undefined" || widget.readOnly === false)) {
widget.focus();
break;
}
}
}
}
}
jqueryなし、たとえば通常のjavascriptあり:
document.querySelector('form input:not([type=hidden])').focus()
Safariでは動作しますがChrome75では動作しません(2019年4月)