设置鼠标焦点,并使用jQuery将光标移动到input的结尾处

这个问题已经被问到了几种不同的格式,但我不能得到任何答案在我的scheme工作。

当用户点击向上/向下箭头时,我使用jQuery来实现命令历史logging。 当向上箭头被击中时,我用前面的命令replaceinput值,并在input字段上设置焦点,但是希望光标始终位于inputstring的末尾。

我的代码,如下所示:

$(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”末尾?

看起来像聚焦后清理价值,然后重新设置作品。

 input.focus(); var tmpStr = input.val(); input.val(''); input.val(tmpStr); 

它看起来有点奇怪,甚至是愚蠢的,但是这对我来说是工作的:

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

现在,我不确定是否复制了您的设置。 我假设input是一个<input>元素。

通过重新设置值(本身),我认为光标正在input的末尾。 在Firefox 3和MSIE7上testing。

希望这对你有所帮助:

 var fieldInput = $('#fieldName'); var fldLength= fieldInput.val().length; fieldInput.focus(); fieldInput[0].setSelectionRange(fldLength, fldLength); 

2 artlung的答案:它只能在我的代码(IE7,IE8; Jquery v1.6)的第二行:

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

另外:如果使用JQuery将input元素添加到DOM,则不会在IE中设置焦点。 我用了一个小诀窍:

 input.blur().focus().val(input.val()); 

克里斯Coyier有一个迷你的jQuery插件,这工作得很好: http : //css-tricks.com/snippets/jquery/move-cursor-to-end-of-textarea-or-input/

如果支持,它使用setSelectionRange ,否则有一个稳定的回退。

 jQuery.fn.putCursorAtEnd = function() { return this.each(function() { $(this).focus() // If this function exists... if (this.setSelectionRange) { // ... then use it (Doesn't work in IE) // Double the length because Opera is inconsistent about whether a carriage return is one character or two. Sigh. var len = $(this).val().length * 2; this.setSelectionRange(len, len); } else { // ... otherwise replace the contents with itself // (Doesn't work in Google Chrome) $(this).val($(this).val()); } // Scroll to the bottom, in case we're in a tall textarea // (Necessary for Firefox and Google Chrome) this.scrollTop = 999999; }); }; 

那么你可以做:

 input.putCursorAtEnd(); 

怎么样在一个单一的线…

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

这条线适用于我。

我知道这个答案来得晚,但我可以看到人们还没有find答案。 要防止向上键将光标置于开始位置,只需从处理事件的方法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 

我使用下面的代码,它工作正常

 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(); } } } 

对于不同的浏览器会有所不同:

这工作在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(); 

更多细节在这里在SitePoint , AspAlliance的这些文章。

参考:@ will824评论,这个解决scheme为我工作没有兼容性问题。 其他解决scheme在IE9失败。

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

经过testing,发现工作在:

 Firefox 33 Chrome 34 Safari 5.1.7 IE 9 

我已经find了几个人上面提到的相同的东西。 如果先focus() ,然后将val()插入input,则光标将定位到Firefox,Chrome和IE中的input值的末尾。 如果您先将val()input到input字段中,则Firefox和Chrome会将光标置于最后,但是当您focus()时,IE会将其放在最前面。

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

应该做的伎俩(无论如何,它总是对我来说)。

首先你必须把焦点放在选定的文本框对象上,然后设置值。

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

先设置值。 然后设定焦点。 当它聚焦时,它将使用焦点时存在的值,所以你的值必须先设置。

这个逻辑对我来说是一个应用程序,用一个点击的<button>的值填充一个<input> <button>val()首先被设置。 然后focus()

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

像其他人说的那样,明确和填补为我工作:

  var elem = $('#input_field'); var val = elem.val(); elem.focus().val('').val(val); 
  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')); 

适用于所有浏览器

 function CurFocus() { $('.txtEmail').focus(); } function pageLoad() { setTimeout(CurFocus(),3000); } window.onload = pageLoad; 

蝎子9的答案是有效的。 只是为了更清楚地看到我的代码如下,

 <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>