使用jQuery设置鼠标焦点并将光标移动到输入的末尾

104

这个问题以前已经有过几种不同的提问方式,但我无法在我的场景中使任何答案都起作用。

我正在使用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

如何在聚焦后强制将光标放置在 'input' 的末尾?

20个回答

4

像其他人说的那样,清除并填充对我有用:

    var elem = $('#input_field');
    var val = elem.val();
    elem.focus().val('').val(val);

3

先设置值,再设置焦点。当它获得焦点时,它将使用获得焦点时存在的值,因此您的值必须首先设置。

在一个应用程序中,当点击一个 <button>时,它会将值填充到一个<input>元素中。这个逻辑对我有用。首先设置val(),然后使用 focus()

$('button').on('click','',function(){
    var value = $(this).attr('value');
    $('input[name=item1]').val(value);
    $('input[name=item1]').focus();
});

你可以将其简化为一行代码,而不是两行:$('input[name=item1]').val(value).focus(); - inMILD

2
    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浏览器..


2

首先要将焦点设置在所选的文本框对象上,然后再设置其值。

$('#inputID').focus();
$('#inputID').val('someValue')

1
我尝试过这个,但是不起作用。你使用编辑内容为真的 div 时会有用吗? - Rupam Datta

2

我发现和一些人提出的建议一样。如果你先使用 focus(),然后将 val() 推入输入框中,那么在 Firefox、Chrome 和 IE 中,光标将定位到输入值的末尾。如果你首先将 val() 推入输入框中,Firefox 和 Chrome 会将光标定位到末尾,但是当你使用 focus() 时,IE 会将光标定位到前面。

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

应该可以解决问题(对我来说总是有效的)。


1

这里是另一个不重新分配值的单行代码:

$("#inp").focus()[0].setSelectionRange(99999, 99999);

0
  var prevInputVal = $('#input_id').val();
  $('#input_id').val('').focus().val(prevInputVal)

将输入的先前值存储在变量中 -> 清空输入值 -> 焦点输入 -> 重新分配原始值,简单易行!

0
function CurFocus()
{
    $('.txtEmail').focus(); 
}

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

window.onload = pageLoad;

0

scorpion9的答案可行。为了更清晰,请看下面的代码,

<script src="~/js/jquery.js"></script> 
<script type="text/javascript">
    $(function () {
        var input = $("#SomeId");
        input.focus();
        var tmpStr = input.val();
        input.val('');
        input.val(tmpStr);
    });
</script>

-4

它将会以鼠标指针为焦点

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接