[解決済み】htmlのテキストボックスでキーボードのキャレット位置を設定する
2022-04-11 11:30:03
質問
テキストボックスのキーボードキャレットを特定の位置に移動させる方法をご存知の方はいらっしゃいますか?
例えば、テキストボックス(例:input要素、text-areaではない)に50文字入っていて、キャレットを20文字の前に配置したい場合、どうすればいいでしょうか?
この質問との差別化で。 jQuery テキストエリアでのカーソル位置の設定 のように、jQueryが必要です。
解決するには?
Josh Stodolaの記事より抜粋。 JavascriptでテキストボックスやTextAreaのキーボードキャレット位置を設定する
テキストボックスやテキストエリアの好きな位置にキャレットを挿入できるようにする汎用関数です。
function setCaretPosition(elemId, caretPos) {
var elem = document.getElementById(elemId);
if(elem != null) {
if(elem.createTextRange) {
var range = elem.createTextRange();
range.move('character', caretPos);
range.select();
}
else {
if(elem.selectionStart) {
elem.focus();
elem.setSelectionRange(caretPos, caretPos);
}
else
elem.focus();
}
}
}
期待される最初のパラメータは、キーボードキャレットを挿入したい要素のIDです。もしその要素が見つからない場合は、何も起こりません(当然ですが)。2番目のパラメータは、キャレット位置のインデックスです。0を指定すると、キーボードキャレットは先頭に置かれます。要素の文字数より大きな値を渡すと、キーボードキャレットを末尾に配置します。
IE6以上、Firefox2、Opera8、Netscape9、SeaMonkey、Safariでテストしています。残念ながらSafariでは、onfocusイベントとの組み合わせで動作しません)。
上記の関数を使用して、ページ上のすべてのテキストエリアにフォーカスが当たったときに、キーボードキャレットを強制的に末尾にジャンプさせる例です。
function addLoadEvent(func) {
if(typeof window.onload != 'function') {
window.onload = func;
}
else {
if(func) {
var oldLoad = window.onload;
window.onload = function() {
if(oldLoad)
oldLoad();
func();
}
}
}
}
// The setCaretPosition function belongs right here!
function setTextAreasOnFocus() {
/***
* This function will force the keyboard caret to be positioned
* at the end of all textareas when they receive focus.
*/
var textAreas = document.getElementsByTagName('textarea');
for(var i = 0; i < textAreas.length; i++) {
textAreas[i].onfocus = function() {
setCaretPosition(this.id, this.value.length);
}
}
textAreas = null;
}
addLoadEvent(setTextAreasOnFocus);
関連
-
[解決済み】このエラーの原因は何ですか - "Fatal error: ローカルgruntを見つけることができません"
-
[解決済み】Angular JS Uncaught Error。[インジェクター:モジュラー]。
-
[解決済み】JavaScriptのisset()に相当するもの
-
[解決済み】「Uncaught TypeError: Chromeで "Illegal invocation "が発生する。
-
[解決済み】SyntaxError: ChromeのJavascriptコンソールでUnexpected Identifierが発生する。
-
[解決済み] Uncaught (in promise) TypeError: フェッチに失敗してCorsエラー
-
[解決済み] HTMLマークアップのどこに<script>タグを記述すればよいですか?
-
[解決済み] jQuery テキストエリアでのカーソル位置の設定
-
[解決済み】JavaScriptの関数にデフォルトのパラメータ値を設定する
-
[解決済み] Set cursor position on contentEditable <div>
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】JavaScriptのgetElementByNameが機能しない
-
[解決済み】Javascriptのコールバック関数がFirefoxで「Callback is not a function」というエラーを投げる
-
[解決済み】「Uncaught TypeError: Chromeで "Illegal invocation "が発生する。
-
[解決済み】Javascript - ERR_CONTENT_LENGTH_MISMATCH
-
[解決済み】JavaScript ランタイムエラー:'$'が未定義です。
-
[解決済み】getElementByIdはnullを返す?[クローズド]
-
[解決済み】ES6マップオブジェクトをソートすることは可能ですか?
-
[解決済み】Javascript、[オブジェクトHTMLInputElement]を表示中。]
-
[解決済み] jQuery テキストエリアでのカーソル位置の設定
-
[解決済み] contentEditableキャレット位置の取得