Webページのフォーカスを設定(入力カーソル)最初の入力要素(テキストボックス、ドロップダウンリスト、...)なしでページをロードする簡単な方法はありますか要素のIDを知る必要がありますか?
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に飛び込む に詳細があります。
document.forms[0].elements[0].focus();
これは、たとえばループを使用して改善できます。特定のタイプのフィールド、無効なフィールドなどに焦点を合わせないでください。ベターは、実際にフィールドにclass = "autofocus"を追加することですdoフォーカスし、そのclassNameを探しているforms [i] .elements [j]をループします。
とにかく、通常、すべてのページでこれを行うのは良い考えではありません。入力に焦点を合わせると、ユーザーは次の機能を失います。キーボードからページをスクロールします。予想外の場合、これは迷惑になる可能性があるため、フォームフィールドの使用がユーザーの希望通りであると確信している場合にのみオートフォーカスします。すなわち。あなたがGoogleの場合。
私が働いていることがわかった最も包括的なjQuery式は、( here 以上の助けを借りて)
$(document).ready(function() {
$('input:visible:enabled:first').focus();
});
Prototype 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();
上記の多くの答えを試してみましたが、うまくいきませんでした。次の場所にあります: http://www.kolodvor.net/2008/01/17/set-focus-on-first-field-with-jquery/#comment-1317 ありがとうKolodvor。
$("input:text:visible:first").focus();
このコードを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();
これは、テキストエリアや選択ボックスなど、表示される一般的な入力の最初を取得します。また、非表示、無効化、読み取り専用にならないようにします。また、ソフトウェアで使用するターゲットdivを許可します(つまり、このフォーム内の最初の入力)。
$("input:visible:enabled:not([readonly]),textarea:visible:enabled:not([readonly]),select:visible:enabled:not([readonly])",
target).first().focus();
JSF2.2 +を使用し、オートフォーカスを値なしの属性として渡すことができない場合は、これを使用します。
p:autofocus="true"
そして、それを名前空間pに追加します(また、しばしばptを使用します。好きなものは何でも)。
<html ... xmlns:p="http://Java.Sun.com/jsf/passthrough">
これにはテキストエリアが含まれ、ラジオボタンは除外されます
$(document).ready(function() {
var first_input = $('input[type=text]:visible:enabled:first, textarea:visible:enabled:first')[0];
if(first_input != undefined){ first_input.focus(); }
});
サードパーティのライブラリがなければ、次のようなものを使用します
const inputElements = parentElement.getElementsByTagName('input')
if (inputChilds.length > 0) {
inputChilds.item(0).focus();
}
すべてのフォーム要素タグを検討し、他の回答のように非表示/無効なタグを除外するなどしてください。
AngularJS
の場合:
angular.element('#Element')[0].focus();
jqueryなし、例えば通常のjavascriptの場合:
document.querySelector('form input:not([type=hidden])').focus()
safariで動作しますが、Chrome 75では動作しません(2019年4月)
親がこの要素を隠している可能性があるため、表示属性をチェックする代わりに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;
}
}
}
}
}