在文本框中设置最后一个字符后的焦点

我有三个文本框的电话号码。当用户键入时,它会自动从一个文本框移动到下一个文本框。当用户按退格键时,我可以将焦点移到前一个文本框。问题是在 IE 中,焦点设置在文本框的开头。这是我的代码,在 chrome 中运行良好。

$('#AreaCode').live('keyup', function (event) {
if ($(this).val().length == $(this).attr("maxlength"))
$('#Prefix').focus();
});


$('#Prefix').live('keyup', function (event) {
if (event.keyCode == 8 && $(this).val().length == 0)
$('#AreaCode').focus();


if ($(this).val().length == $(this).attr("maxlength"))
$('#Number').focus();
});


$('#Number').live('keyup', function (event) {
if (event.keyCode == 8 && $(this).val().length == 0)
$('#Prefix').focus();
});

我如何使焦点设置在结束的内容时,向后?

135734 次浏览

这是最简单的方法,如果你在倒退,只要加上 $("#Prefix").val($("#Prefix").val()); 在你集中注意力之后

这是更合适(更干净)的方法:

function SetCaretAtEnd(elem) {
var elemLen = elem.value.length;
// For IE Only
if (document.selection) {
// Set focus
elem.focus();
// Use IE Ranges
var oSel = document.selection.createRange();
// Reset position to 0 & then set at end
oSel.moveStart('character', -elemLen);
oSel.moveStart('character', elemLen);
oSel.moveEnd('character', 0);
oSel.select();
}
else if (elem.selectionStart || elem.selectionStart == '0') {
// Firefox/Chrome
elem.selectionStart = elemLen;
elem.selectionEnd = elemLen;
elem.focus();
} // if
} // SetCaretAtEnd()

任何浏览器的代码:

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

我尝试了很多不同的解决方案,唯一一个对我有效的是基于 Chris G 在这个页面上的解决方案(但稍作修改)。

我已经把它变成了一个 jQuery 插件,以供将来任何需要它的人使用

(function($){
$.fn.setCursorToTextEnd = function() {
var $initialVal = this.val();
this.val($initialVal);
};
})(jQuery);

使用范例:

$('#myTextbox').setCursorToTextEnd();
<script type="text/javascript">
$(function(){
$('#areaCode,#firstNum,#secNum').keyup(function(e){
if($(this).val().length==$(this).attr('maxlength'))
$(this).next(':input').focus()
})
})
</script>


<body>


<input type="text" id="areaCode" name="areaCode" maxlength="3" value="" size="3" />-
<input type="text" id="firstNum" name="firstNum" maxlength="3" value="" size="3" />-
<input type="text" id="secNum" name=" secNum " maxlength="4" value="" size="4" />


</body>

这对我来说很好用

(function($){
$.fn.focusTextToEnd = function(){
this.focus();
var $thisVal = this.val();
this.val('').val($thisVal);
return this;
}
}(jQuery));


$('#mytext').focusTextToEnd();

您可以按照以下步骤设置文本框最后一个位置的指针。

temp=$("#txtName").val();
$("#txtName").val('');
$("#txtName").val(temp);
$("#txtName").focus();

你应该这样编码。

var num = $('#Number').val();
$('#Number').focus().val('').val(num);

可以在 input 标记中使用这些简单的 javascript。

<input type="text" name="your_name" value="your_value"
onfocus="this.setSelectionRange(this.value.length, this.value.length);"
autofocus />
var val =$("#inputname").val();
$("#inputname").removeAttr('value').attr('value', val).focus();
// I think this is beter for all browsers...

Chris Coyier 有一个迷你的 jQuery 插件,非常好用: http://css-tricks.com/snippets/jquery/move-cursor-to-end-of-textarea-or-input/

它使用 setSelectionRange (如果支持的话) ,else 有一个可靠的备份。

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