100

この質問はいくつかの異なる形式で尋ねられましたが、私のシナリオで機能する答えを得ることができません。

ユーザーが上/下矢印を押したときにコマンド履歴を実装するためにjQueryを使用しています。上矢印キーを押すと、入力値を前のコマンドに置き換え、入力フィールドにフォーカスを設定しますが、カーソルを常に入力文字列の最後に配置したいと考えています。

私のコードはそのままです:

$(document).keydown(function(e) {
  var key   = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
  var input = self.shell.find('input.current:last');

  switch(key) {
    case 38: // up
      lastQuery = self.queries[self.historyCounter-1];
      self.historyCounter--;
      input.val(lastQuery).focus();
// and it continues on from there

フォーカス後に「入力」の最後にカーソルを配置するにはどうすればよいですか?

4

20 に答える 20

152

フォーカス後に値をクリアしてからリセットするとうまくいくようです。

input.focus();
var tmpStr = input.val();
input.val('');
input.val(tmpStr);
于 2011-12-25T22:30:42.680 に答える
56

少し奇妙でばかげているように見えますが、これは私にとってはうまくいきます:

input.val(lastQuery);
input.focus().val(input.val());

さて、私はあなたのセットアップを複製したかどうか確信が持てません. input要素だと思い<input>ます。

値を(それ自体に)再設定することで、カーソルが入力の最後に置かれていると思います。Firefox 3 および MSIE7 でテスト済み。

于 2009-06-29T03:08:15.043 に答える
12

一行でどうだろう…

$('#txtSample').focus().val($('#txtSample').val());

この行は私にとってはうまくいきます。

于 2014-11-05T16:13:00.717 に答える
10

参照: @ will824 コメント、このソリューションは互換性の問題なしで機能しました。残りのソリューションは IE9 で失敗しました。

var input = $("#inputID");
var tmp = input.val();
input.focus().val("").blur().focus().val(tmp);

テスト済みで動作確認済み:

Firefox 33
Chrome 34
Safari 5.1.7
IE 9
于 2014-09-19T06:28:50.237 に答える
8

2 artlungの回答: 私のコード (IE7、IE8; Jquery v1.6) の 2 行目でのみ動作します:

var input = $('#some_elem');
input.focus().val(input.val());

追記: jQueryでinput要素をDOMに追加した場合、IEでフォーカスが設定されない。ちょっとしたトリックを使用しました:

input.blur().focus().val(input.val());
于 2011-07-14T09:11:06.267 に答える
6

以下のコードを使用していますが、正常に動作します

function to_end(el) {
            var len = el.value.length || 0;
            if (len) {
                if ('setSelectionRange' in el) el.setSelectionRange(len, len);
                else if ('createTextRange' in el) {// for IE
                    var range = el.createTextRange();
                    range.moveStart('character', len);
                    range.select();
                }
            }
        }
于 2011-03-29T11:47:46.743 に答える
6

ブラウザによって異なります。

これはffで機能します:

    var t =$("#INPUT");
    var l=$("#INPUT").val().length;
    $(t).focus();

    var r = $("#INPUT").get(0).createTextRange();
    r.moveStart("character", l); 
    r.moveEnd("character", l);      
    r.select();

詳細については、SitePointAspAllianceの記事を参照してください。

于 2009-06-29T03:07:58.740 に答える
6

この答えが遅れていることはわかっていますが、人々が答えを見つけていないことがわかります。return falseイベントを処理するメソッドからだけで、上キーがカーソルを先頭に置くのを防ぐため。これにより、カーソルの移動につながるイベント チェーンが停止します。以下のOPから修正されたコードを貼り付けます:

$(document).keydown(function(e) {
  var key   = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
  var input = self.shell.find('input.current:last');

  switch(key) {
    case 38: // up
      lastQuery = self.queries[self.historyCounter-1];
      self.historyCounter--;
      input.val(lastQuery).focus();
      // HERE IS THE FIX:
      return false; 
// and it continues on from there
于 2010-09-09T12:02:11.863 に答える
4

他の人が言ったように、 clear と fill は私にとってはうまくいきました:

    var elem = $('#input_field');
    var val = elem.val();
    elem.focus().val('').val(val);
于 2014-05-23T02:45:49.607 に答える
3

最初に値を設定します。次にフォーカスを設定します。フォーカスすると、フォーカス時に存在する値が使用されるため、最初に値を設定する必要があります。

<input>このロジックは、 に clicked の値を入力するアプリケーションで機能します<button>val()が最初に設定されます。それからfocus()

$('button').on('click','',function(){
    var value = $(this).attr('value');
    $('input[name=item1]').val(value);
    $('input[name=item1]').focus();
});
于 2016-08-16T20:55:23.707 に答える
2

私は、数人の人々によって上記で提案されたものと同じものを見つけました。focus()最初にを入力に押し込むと、val()Firefox、Chrome、およびIEではカーソルが入力値の最後に配置されます。val()最初に入力フィールドにを押すと、FirefoxとChromeはカーソルを最後に置きますが、IEはカーソルを前に置きますfocus()

$('element_identifier').focus().val('some_value') 

トリックを行う必要があります(とにかくそれは常に私のためにあります)。

于 2012-04-17T19:54:02.430 に答える
2

最初に、選択したテキスト ボックス オブジェクトにフォーカスを設定し、次に値を設定する必要があります。

$('#inputID').focus();
$('#inputID').val('someValue')
于 2013-05-13T15:09:38.977 に答える
1
    function focusCampo(id){
        var inputField = document.getElementById(id);
        if (inputField != null && inputField.value.length != 0){
            if (inputField.createTextRange){
                var FieldRange = inputField.createTextRange();
                FieldRange.moveStart('character',inputField.value.length);
                FieldRange.collapse();
                FieldRange.select();
            }else if (inputField.selectionStart || inputField.selectionStart == '0') {
                var elemLen = inputField.value.length;
                inputField.selectionStart = elemLen;
                inputField.selectionEnd = elemLen;
                inputField.focus();
            }
        }else{
            inputField.focus();
        }
    }

$('#urlCompany').focus(focusCampo('urlCompany'));

すべてのIEブラウザで動作します..

于 2015-07-08T05:41:39.493 に答える
0
function CurFocus()
{
    $('.txtEmail').focus(); 
}

function pageLoad()
{
   setTimeout(CurFocus(),3000);
}

window.onload = pageLoad;
于 2012-06-13T10:26:17.737 に答える
0
  var prevInputVal = $('#input_id').val();
  $('#input_id').val('').focus().val(prevInputVal)

入力前の値を変数に保存 -> 空の入力値 -> フォーカス入力 -> 元の値を再割り当て SIMPLE !

于 2021-05-25T09:07:34.423 に答える
-4

マウスポイントでフォーカスします

$("#TextBox").focus();

于 2019-11-19T06:29:27.073 に答える