フォーカス機能を備えたテキストフィールドにカーソルを設定しようとしています。私はいくつかの調査を行いましたが、提供されたソリューションはどれもGoogle Chromeで機能していないようです。 Internet ExplorerおよびFirefoxでは、このソリューションは正常に機能しています。
Js:
$('#Search').focus(function() {
var SearchInput = $('#Search');
var strLength= SearchInput.val().length;
SearchInput.focus();
SearchInput[0].setSelectionRange(strLength, strLength);
});
HTML:
<input type="text" id="Search" value="Hello World" />
ここに私の jsfiddle へのリンクがあります。
Googleでこれを機能させる方法はありますかChromeもですか?
入力にフォーカスを合わせたときにカーソルが置かれる前にフォーカスイベントが発生するように思えるので、次のようなsetTimeoutを使用することでハッキングを回避できます。
$('#Search').focus(function() {
setTimeout((function(el) {
var strLength = el.value.length;
return function() {
if(el.setSelectionRange !== undefined) {
el.setSelectionRange(strLength, strLength);
} else {
$(el).val(el.value);
}
}}(this)), 0);
});
このフィドルを試してください:http://jsfiddle.net/esnvh/26/
@SparKがこれを実行キューの最後にプッシュするのに十分だと指摘したように、タイムアウトを0msに編集しました。
更新されたコード
参照: http://css-tricks.com/snippets/jquery/move-cursor-to-end-of-textarea-or-input/
setSelectionRange
サポートされていません IEでは、Opera&Safari
このようなものを作成することをお勧めします(IE、Chrome、Safari、Firefoxで動作します)。
$('#Search').on('mouseup', function() {
var element = $(this)[0];
if (this.setSelectionRange) {
var len = $(this).val().length * 2;
element.setSelectionRange(len, len);
}
else {
$(this).val($(this).val());
$(this).focus();
}
element.scrollTop = 9999;
});
これを試してください: http://jsfiddle.net/r5UVW/4/
そのためにmouseupイベントを使用します。
$("#Search").mouseup(function () {
this.setSelectionRange(this.value.length, this.value.length);
});
参考までに、現在、数値入力はsetSelectionRange()
をサポートしていないため、簡単な解決策は.select()
を使用してテキストを選択することです。デスクトップブラウザではテキストが強調表示され、モバイルではカーソルがテキストの最後に直接移動します。