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

Odoo 10中如何阻止按回车键提交表单?

问题分析与解决方案

嘿,我一眼就揪出问题所在啦——你现在监听的是按钮的click事件,但click事件的事件对象里根本没有keyCode属性,这就是你打印e.keyCode得到undefined的核心原因!

你的需求是阻止用户按回车键提交表单,正确思路应该是监听表单或输入框的键盘事件(比如keydown),而不是按钮的点击事件,因为浏览器默认会在表单内按下回车时触发提交行为,不一定需要点击提交按钮。

这里给你调整后的可用代码:

snippet_animation.registry.form_builder_send.include({
    start: function(editable_mode){
        var self = this;
        // 找到当前表单,监听键盘按下事件
        this.$target.closest('form').on('keydown', function(e) {
            // 用e.key判断更符合现代标准,兼容性比keyCode更好
            if (e.key === 'Enter') {
                e.preventDefault(); // 阻止回车提交的浏览器默认行为
                console.log('回车键已被拦截,表单不会提交');
            }
        });
        
        // 保留按钮点击的正常提交逻辑
        this.$target.find('.o_website_form_send').on('click',function(e) {
            self.send(e);
        });
        
        this._super(editable_mode);
    },
})

关键调整说明:

  • 把监听对象从按钮click事件改成了表单的keydown事件,能捕获表单内所有输入框的回车键操作
  • 用e.key === 'Enter'替代keyCode,keyCode已被标记为废弃,e.key是更规范的写法
  • 拆分了键盘拦截和按钮提交逻辑,确保点击按钮时依然能正常触发表单提交

这样就能完美实现「阻止回车提交,保留点击提交」的需求啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:10:30