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

如何禁用Modal中Textarea编辑时光标自动跳至末行的行为

解决Modal内Textarea光标自动跳转到末尾的问题

这个问题我之前用Bootstrap Modal时也碰到过!核心原因是模态框显示时会自动聚焦到第一个可交互元素(也就是你的textarea),而浏览器默认聚焦textarea时会把光标定位到文本末尾。咱们可以通过以下几种方法禁用这个默认行为:

方法一:通过Modal事件手动控制光标位置

先给你的Modal容器加个ID方便选择(比如noteModal),然后监听Modal的shown.bs.modal事件,在模态框完全显示后恢复光标到用户点击的位置:

修改后的HTML(添加Modal ID)

<div class="modal-dialog modal-lg" id="noteModal">
  <div class="modal-content">
    <div class="modal-header">
      <h5 class="modal-title">Not Düzenle</h5>
      <button type="button" class="close" data-dismiss="modal" aria-label="Close">
        <span aria-hidden="true">×</span>
      </button>
    </div>
    <div class="modal-body">
      <textarea id="eventNote" rows="5" wrap="soft" class="form-control text-uppercase">ALBÜM MODELİ WOODY 2 LACİVERT RENK OLACAK.</textarea>
    </div>
    <div class="modal-footer">
      <button type="button" class="btn btn-secondary" data-dismiss="modal">İptal</button>
      <button type="button" id="editNoteToOrganisationButton" class="btn btn-success">Düzenle</button>
    </div>
  </div>
</div>

JavaScript代码

// 监听Modal显示完成事件
document.getElementById('noteModal').addEventListener('shown.bs.modal', function() {
  const textarea = document.getElementById('eventNote');
  // 保存用户点击前的光标位置
  const startPos = textarea.selectionStart;
  const endPos = textarea.selectionEnd;
  
  // 手动聚焦并恢复光标位置
  textarea.focus();
  textarea.setSelectionRange(startPos, endPos);
});

方法二:直接拦截Textarea的聚焦行为

如果不想依赖Modal事件,也可以直接给textarea添加事件监听,提前保存光标位置并在聚焦时恢复:

const textarea = document.getElementById('eventNote');
let savedCursorStart = 0;
let savedCursorEnd = 0;

// 当用户点击textarea时,保存当前光标位置
textarea.addEventListener('mousedown', function() {
  savedCursorStart = this.selectionStart;
  savedCursorEnd = this.selectionEnd;
});

// 当textarea获得焦点时,恢复之前保存的光标位置
textarea.addEventListener('focus', function() {
  // 用setTimeout确保DOM渲染完成后再执行
  setTimeout(() => {
    this.setSelectionRange(savedCursorStart, savedCursorEnd);
  }, 0);
});

方法三:禁止Modal自动聚焦任何元素

如果你不需要Modal自动聚焦到任何元素,可以通过Bootstrap的Modal配置直接禁用这个行为:

$('#noteModal').modal({
  focus: false
});

这样Modal显示时就不会自动触发textarea的聚焦,光标位置就能保持在你点击的地方啦!

内容的提问来源于stack exchange,提问作者A.Hakan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 15:39:07