这个问题已经被问过几种不同的格式,但我无法在我的场景中得到任何答案。
当用户点击向上/向下箭头时,我正在使用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'的末尾?
答案 0 :(得分:130)
看起来在聚焦后清除值然后重置工作。
input.focus();
var tmpStr = input.val();
input.val('');
input.val(tmpStr);
答案 1 :(得分:54)
看起来有点奇怪,甚至很傻,但这对我有用:
input.val(lastQuery);
input.focus().val(input.val());
现在,我不确定我是否已复制您的设置。我假设input
是<input>
元素。
通过重新设置值(自身),我认为光标放在输入的末尾。在Firefox 3和MSIE7中测试。
答案 2 :(得分:32)
希望这能帮到你:
var fieldInput = $('#fieldName');
var fldLength= fieldInput.val().length;
fieldInput.focus();
fieldInput[0].setSelectionRange(fldLength, fldLength);
答案 3 :(得分:11)
在一行中怎么样......
$('#txtSample').focus().val($('#txtSample').val());
这条线适合我。
答案 4 :(得分:8)
Chris 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();
答案 5 :(得分:8)
2 artlung 的回答: 它仅在我的代码(IE7,IE8; Jquery v1.6)中使用第二行:
var input = $('#some_elem');
input.focus().val(input.val());
添加:如果使用JQuery将输入元素添加到DOM,则不会在IE中设置焦点。我用了一个小技巧:
input.blur().focus().val(input.val());
答案 6 :(得分: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();
}
}
}
答案 7 :(得分:6)
参考:@ will824评论,此解决方案适用于我,没有兼容性问题。其余解决方案在IE9中失败。
var input = $("#inputID");
tmp = input.val(); input.focus().val("").blur().focus().val(tmp);
经过测试并找到了工作:
Firefox 33
Chrome 34
Safari 5.1.7
IE 9
答案 8 :(得分:6)
我知道这个答案来得很晚,但我看到人们还没有找到答案。要防止up键将光标放在开头,只需处理事件的方法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
答案 9 :(得分:5)
不同的浏览器会有所不同:
这适用于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。
答案 10 :(得分:3)
var elem = $('#input_field');
var val = elem.val();
elem.focus().val('').val(val);
答案 11 :(得分:2)
我发现了一些人的上述建议。如果您先focus()
,然后将val()
推入输入,光标将定位到Firefox,Chrome和IE中输入值的末尾。如果您先将val()
推入输入字段,Firefox和Chrome会将光标定位在最后,但是当您focus()
时,IE会将其置于前面。
$('element_identifier').focus().val('some_value')
应该做的伎俩(无论如何它总是对我而言)。
答案 12 :(得分:2)
首先,您必须将焦点设置在所选的文本框对象上,然后设置值。
$('#inputID').focus();
$('#inputID').val('someValue')
答案 13 :(得分:2)
首先设置值。然后设置焦点。当它聚焦时,它将使用焦点时存在的值,因此必须首先设置你的值。
此逻辑适用于我的应用程序,该应用程序使用单击的<input>
填充<button>
。首先设置val()
。然后focus()
$('button').on('click','',function(){
var value = $(this).attr('value');
$('input[name=item1]').val(value);
$('input[name=item1]').focus();
});
答案 14 :(得分:2)
这是另一个,一个不重新分配价值的班轮:
$("#inp").focus()[0].setSelectionRange(99999, 99999);
答案 15 :(得分: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'));
适用于所有浏览器..
答案 16 :(得分:0)
function CurFocus()
{
$('.txtEmail').focus();
}
function pageLoad()
{
setTimeout(CurFocus(),3000);
}
window.onload = pageLoad;
答案 17 :(得分: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>
答案 18 :(得分:0)
var prevInputVal = $('#input_id').val();
$('#input_id').val('').focus().val(prevInputVal)
<块引用>
将先前输入的值存储在变量中 -> 空输入值 -> 焦点输入 -> 重新分配原始值 SIMPLE !
答案 19 :(得分:-2)
它将用鼠标指向焦点
$(“#TextBox”)。focus();