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

如何实现仅Enter键keyup时提交表单 解决事件不生效问题

失效原因

你的自定义逻辑没生效,核心是两个问题:

  • 内联事件绑定写法错误:onkeyup="keypressHandler" 只写了函数名,既没有实际调用函数,也没传入事件对象,按键松开时根本不会执行你写的判断逻辑。
  • 用了已被Web标准废弃的keyCode属性,部分新版本浏览器中无法正确获取键值。
正确写法

直接修改内联事件的调用方式,传入事件对象,同时用兼容性更好的按键判断逻辑:

<input id="filter_package_byidphrase" asp-for="@Model.FilterByPackageIdPhrase" class="package_list_list_filter_controll_input" onkeyup="keypressHandler(event)">

<script type="text/javascript">
     function keypressHandler(e) {
          // 同时兼容新旧标准判断是否按下回车键
          if(e.key === 'Enter' || e.keyCode === 13) {
                e.preventDefault();
                // 提交对应表单,提前确认页面上表单id确实是filterform
                document.getElementById('filterform').submit();
                // 如果项目里引入了jQuery,也可以替换成 $('#filterform').submit();
          }
     }
</script>
更推荐的分离式写法

如果不想把JS逻辑写在标签属性里,可以用事件绑定的方式分离结构和逻辑,后续维护更方便:

<!-- 移除input上的onkeyup属性 -->
<input id="filter_package_byidphrase" asp-for="@Model.FilterByPackageIdPhrase" class="package_list_list_filter_controll_input">

<script type="text/javascript">
const searchInput = document.getElementById('filter_package_byidphrase');
searchInput.addEventListener('keyup', function(e) {
  if(e.key === 'Enter') {
    e.preventDefault();
    // 如果输入框本身就在目标表单内部,也可以直接写 this.form.submit(),不用硬编码表单id
    document.getElementById('filterform').submit();
  }
})
</script>

注意:如果输入框本身就在表单内部,回车键默认就会触发表单提交,不需要额外绑定keyup事件;如果出现默认提交行为和自定义逻辑冲突的情况,再用e.preventDefault()阻止默认行为即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:57:20