有人知道如何移动文本框中的键盘插入符号到特定位置吗?
例如,如果一个文本框(例如输入元素,而不是文本区域)有50个字符,我想在字符20之前放置插入符号,我该怎么做呢?
这是在区别于这个问题:jQuery设置光标位置在文本区域,这需要jQuery。
有人知道如何移动文本框中的键盘插入符号到特定位置吗?
例如,如果一个文本框(例如输入元素,而不是文本区域)有50个字符,我想在字符20之前放置插入符号,我该怎么做呢?
这是在区别于这个问题:jQuery设置光标位置在文本区域,这需要jQuery。
当前回答
function SetCaretEnd(tID) {
tID += "";
if (!tID.startsWith("#")) { tID = "#" + tID; }
$(tID).focus();
var t = $(tID).val();
if (t.length == 0) { return; }
$(tID).val("");
$(tID).val(t);
$(tID).scrollTop($(tID)[0].scrollHeight); }
其他回答
我稍微调整了kd7的答案,因为elem。当selectionStart恰好为0时,selectionStart将计算为false。
function setCaretPosition(elem, caretPos) {
var range;
if (elem.createTextRange) {
range = elem.createTextRange();
range.move('character', caretPos);
range.select();
} else {
elem.focus();
if (elem.selectionStart !== undefined) {
elem.setSelectionRange(caretPos, caretPos);
}
}
}
我发现了一个简单的方法来解决这个问题,在IE和Chrome测试:
function setCaret(elemId, caret)
{
var elem = document.getElementById(elemId);
elem.setSelectionRange(caret, caret);
}
将文本框id和插入符号位置传递给此函数。
HTMLInputElement。临时人选;
// References
var e = document.getElementById( "helloworldinput" );
// Move caret to beginning on focus
e.addEventListener( "focus", function( event )
{
// References
var e = event.target;
// Action
e.setSelectionRange( 0, 0 ); // Doesn’t work for focus event
window.setTimeout( function()
{
e.setSelectionRange( 0, 0 ); // Works
//e.setSelectionRange( 1, 1 ); // Move caret to second position
//e.setSelectionRange( 1, 2 ); // Select second character
}, 0 );
}, false );
浏览器兼容性(仅适用于文本、搜索、url、电话和密码类型): https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange#Specifications
如果你需要聚焦一些文本框,你唯一的问题是整个文本被高亮显示,而你想要插入符号在结尾,那么在这种特定的情况下,你可以使用这个技巧来设置文本框的值为自己的焦点后:
$("#myinputfield").focus().val($("#myinputfield").val());
因为我确实需要这个解决方案,而典型的基线解决方案(聚焦输入-然后设置值等于本身)不能跨浏览器工作,所以我花了一些时间调整和编辑所有内容以使其工作。在@kd7的代码的基础上,这里是我想出的。
享受吧!适用于IE6+, Firefox, Chrome, Safari, Opera
跨浏览器插入符号定位技术(例如:将光标移动到END)
// ** USEAGE ** (returns a boolean true/false if it worked or not)
// Parameters ( Id_of_element, caretPosition_you_want)
setCaretPosition('IDHERE', 10); // example
肉和土豆基本上是@kd7的setCaretPosition,最大的调整是if (el。selectionStart || el。selectionStart === 0),在firefox中selectionStart是从0开始的,在布尔中当然是变为False,所以它在这里中断了。
在chrome最大的问题是,只是给它.focus()是不够的(它一直选择所有的文本!)因此,我们将自身的值设为el。Value = el.value;在调用我们的函数之前,现在它有一个抓取&位置的输入使用selectionStart。
function setCaretPosition(elemId, caretPos) {
var el = document.getElementById(elemId);
el.value = el.value;
// ^ this is used to not only get "focus", but
// to make sure we don't have it everything -selected-
// (it causes an issue in chrome, and having it doesn't hurt any other browser)
if (el !== null) {
if (el.createTextRange) {
var range = el.createTextRange();
range.move('character', caretPos);
range.select();
return true;
}
else {
// (el.selectionStart === 0 added for Firefox bug)
if (el.selectionStart || el.selectionStart === 0) {
el.focus();
el.setSelectionRange(caretPos, caretPos);
return true;
}
else { // fail city, fortunately this never happens (as far as I've tested) :)
el.focus();
return false;
}
}
}
}