什么是最好的方法(我假设最简单的方法),以放置光标在文本的输入文本元素的末尾通过JavaScript -焦点已设置到元素?
当前回答
这个问题很有趣。最令人困惑的是,我没有找到完全解决这个问题的方法。
+++++++ +++++++ +++++++ +++++++ +++++++ +++++++
你需要一个JS函数,像这样: 函数moveCursorToEnd If (!(obj.updating)) { obj。更新= true; var oldValue = obj.value; obj。Value = "; setTimeout(函数(){obj。value = oldValue;obj。更新= false;}, 100); } } 你需要在onfocus和onclick事件中调用这个。 <input type="text" value="Test Field" onfocus="moveCursorToEnd(this)" onclick="moveCursorToEnd(this) "" >
它适用于所有设备的浏览器!!!!
其他回答
document.querySelector(“输入”)。addEventListener('focus', e => { Const {value} = e.target; e.target.setSelectionRange(价值。长度,value.length); }); <input value="my text" />
我喜欢接受的答案很多,但它停止工作在Chrome。在Chrome浏览器中,光标要走到最后,需要改变输入值。解决方法如下:
<input id="search" type="text" value="mycurrtext" size="30"
onfocus="var value = this.value; this.value = null; this.value = value;" name="search"/>
这个问题很有趣。最令人困惑的是,我没有找到完全解决这个问题的方法。
+++++++ +++++++ +++++++ +++++++ +++++++ +++++++
你需要一个JS函数,像这样: 函数moveCursorToEnd If (!(obj.updating)) { obj。更新= true; var oldValue = obj.value; obj。Value = "; setTimeout(函数(){obj。value = oldValue;obj。更新= false;}, 100); } } 你需要在onfocus和onclick事件中调用这个。 <input type="text" value="Test Field" onfocus="moveCursorToEnd(this)" onclick="moveCursorToEnd(this) "" >
它适用于所有设备的浏览器!!!!
下面是我的答案的jsFiddle演示。演示使用CoffeeScript,但如果需要,可以将其转换为纯JavaScript。
JavaScript中重要的部分是:
var endIndex = textField.value.length;
if (textField.setSelectionRange) {
textField.setSelectionRange(endIndex, endIndex);
}
我把这个答案贴出来是因为我已经为有同样问题的其他人写过了。这个答案不像上面的答案那样涵盖那么多的边缘情况,但它适合我,并且有一个jsFiddle演示可以玩。
下面是来自jsFiddle的代码,所以即使jsFiddle消失了,这个答案也会被保留:
moveCursorToEnd = (textField) ->
endIndex = textField.value.length
if textField.setSelectionRange
textField.setSelectionRange(endIndex, endIndex)
jQuery ->
$('.that-field').on 'click', ->
moveCursorToEnd(this)
<div class="field">
<label for="pressure">Blood pressure</label>:
<input class="that-field" type="text" name="pressure" id="pressure" value="24">
</div>
<p>
Try clicking in the text field. The cursor will always jump to the end.
</p>
body {
margin: 1em;
}
.field {
margin-bottom: 1em;
}
我从这里得到了最好的答案,并创建了一个在Chrome中工作良好的功能。
您需要将逻辑封装在一个超时中,因为您必须等待焦点完成后才能访问所选内容 要将光标放在末尾,选择起始点需要放在末尾 为了滚动到输入字段的末尾,scrollLeft需要匹配scrollWidth
/** * Upon focus, set the cursor to the end of the text input * @param {HTMLInputElement} inputEl - An HTML <input> element */ const setFocusEnd = (inputEl) => { setTimeout(() => { const { scrollWidth, value: { length } } = inputEl; inputEl.setSelectionRange(length, length); inputEl.scrollLeft = scrollWidth; }, 0); }; document .querySelector('input') .addEventListener('focus', (e) => setFocusEnd(e.target)); html, body { width: 100%; height: 100%; margin: 0; } body { display: flex; flex-direction: column; justify-content: center; align-items: center; } input:focus { background-color: hsla(240, 100%, 95%, 1.0); } <input type="text" placeholder="Search..." value="This is some really, really long text">