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

Vue表单提交后如何阻止光标跳转并保留回车提交功能

问题:提交表单后保持光标在原输入框

我使用submit类型按钮是为了支持回车提交而非手动点击,已知如何阻止默认提交行为,但提交后输入框会生成新的div,光标会自动跳转至新位置,希望保持光标在原输入框。现有代码如下:

<form @submit.prevent="createNewList">
    <input
        type="text"
        class="form fs-4 me-3"
        placeholder="input something here..."
        v-model="listName"
        :maxlength="20"
    />
    <button type="submit" class="btn btn-success bi-clipboard-plus"></button>
</form>

我曾尝试在input标签中添加@keydown.enter.prevent,但导致回车提交功能失效,请问还有其他可行方案吗?


解决方案

不需要修改input的键盘事件,保留表单的@submit.prevent即可,核心是在提交完成后手动将焦点重新定位到原输入框,以下是具体实现:

方法一:通过ref手动聚焦

  1. 给输入框添加ref属性,用于后续获取DOM元素:
<input
    type="text"
    class="form fs-4 me-3"
    placeholder="input something here..."
    v-model="listName"
    :maxlength="20"
    ref="listInput" <!-- 添加这行 -->
/>
  1. 在createNewList方法中,完成业务逻辑后,等待DOM更新(如果清空了listName或修改了DOM结构),再调用focus()方法:
async createNewList() {
    // 执行你的业务逻辑:比如创建新列表、保存数据等
    // 假设业务完成后需要清空输入框
    this.listName = '';
    
    // 等待Vue更新DOM(如果有DOM结构变化)
    await this.$nextTick();
    
    // 聚焦回原输入框
    this.$refs.listInput.focus();
}

关键说明

  • 之前添加@keydown.enter.prevent导致提交失效,是因为这个指令直接阻止了回车事件的传播,表单的submit事件自然无法触发,所以要移除这个指令。
  • 提交后光标跳转的原因是DOM结构变化(生成新div),浏览器默认会调整焦点位置,手动聚焦是最直接可靠的解决方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 18:08:18