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

Odoo 14 中通过Javascript设置输入框值后表单保存无效如何解决

jQuery设置表单值后提交未存储问题解决方案

常见原因及对应修复方案

  • 选择器匹配异常
    原代码的属性选择器未对name值加引号,当name包含特殊字符(空格、中划线、特殊符号)时会匹配失败;也可能出现匹配到多个元素、匹配到禁用/隐藏元素的情况。
    修复:选择器补充引号,筛选有效元素,增加匹配结果校验
    // 优化选择器,只匹配第一个非禁用的同name元素
    let el = $('[name="'+key+'"]:not(:disabled):first');
    if(el.length === 0) {
      console.warn('未找到匹配字段:', key);
      return;
    }
    
  • 未触发表单状态同步事件
    如果表单用了前端框架(Vue/React/Angular)或者UI组件库的输入组件,组件内部通过监听input/change事件同步绑定数据,直接调用val()赋值不会触发事件,组件内部不会更新值,提交时还是旧数据。
    修复:赋值后手动触发对应事件
    el.val(val).trigger('input').trigger('change');
    
  • 赋值时机错误
    执行赋值逻辑时,表单DOM还未渲染完成(比如表单是动态加载、异步渲染的),选择器找不到元素导致赋值失败。
    修复:将赋值逻辑放到表单渲染完成的回调中执行,或加定时器校验DOM存在后再赋值。
  • 字段/值格式不匹配
    接口返回的key和表单name属性拼写不一致(大小写、命名规范差异),或者返回值是对象/数字类型,不符合输入框的字符串要求。
    修复:增加调试日志核对key匹配关系,赋值时统一转成字符串:el.val(String(val))

完整优化后代码

$.each(data['payload'], function(key, val) {
    let el = $('[name="'+key+'"]:not(:disabled):first');
    if (el.length) {
        el.val(String(val)).trigger('input').trigger('change');
    } else {
        console.warn('未匹配到表单字段:', key);
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:54:02