You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

input失去焦点时如何不使用CSS direction显示文本末尾而非开头

实现input输入框失焦后优先展示文本末尾内容的方案

无需使用CSS direction 属性即可实现输入框超出宽度时,失焦/点击外部区域隐藏开头文本、展示末尾文本的效果,以下是两种可直接落地的实现方案:

方案1:Selection API 实现(无侵入、性能最优)

利用input原生的setSelectionRange方法,将光标定位到文本末尾,输入框会自动滚动到对应位置展示末尾内容,不需要修改原文本值。

代码示例

<input id="customInput" value="abcdefghijklmnopqrstwxyz123456789">
const input = document.getElementById('customInput');

// 监听失焦事件
input.addEventListener('blur', () => {
  const valueLength = input.value.length;
  // 将光标定位到文本最后一位,输入框自动滚动到末尾
  input.setSelectionRange(valueLength, valueLength);
});

// 监听全局点击事件,点击输入框外区域时触发相同逻辑
document.addEventListener('click', (e) => {
  if (e.target !== input) {
    const valueLength = input.value.length;
    input.setSelectionRange(valueLength, valueLength);
  }
});

方案优势

  • 不修改input原始value,不影响表单提交逻辑
  • 代码量极小,性能无额外开销
  • 兼容性好,支持所有主流浏览器及IE9以上版本

方案2:动态截断文本(展示效果完全可控)

如果需要完全避免光标展示的影响,可以选择失焦时截断文本只保留末尾指定长度内容,聚焦时恢复完整文本的方案。

代码示例

const input = document.getElementById('customInput');
// 存储输入框完整原始值
let fullValue = input.value;
// 可根据输入框实际宽度调整展示的字符数
const MAX_SHOW_LENGTH = 20;

// 失焦时截断展示末尾内容
input.addEventListener('blur', () => {
  fullValue = input.value;
  if (fullValue.length > MAX_SHOW_LENGTH) {
    input.value = fullValue.slice(-MAX_SHOW_LENGTH);
  }
});

// 聚焦时恢复完整内容
input.addEventListener('focus', () => {
  input.value = fullValue;
  // 光标定位到末尾,符合用户输入习惯
  input.setSelectionRange(fullValue.length, fullValue.length);
});

注意事项

使用该方案时,表单提交需要取存储的fullValue作为提交值,不要直接读取input的value,避免提交被截断的内容

内容的提问来源于stack exchange,提问作者SSKhekhaliya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 15:54:06