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

Odoo10 one2many字段复选框需双击选中问题求助

解决Odoo 10 One2Many字段复选框需双击的问题

嘿,这个问题我在Odoo 10开发时也踩过坑!默认情况下One2Many列表的复选框需要双击才能选中,核心原因是Odoo的列表行点击事件会先抢占焦点(选中整行),第二次点击才会触发复选框的状态切换。下面给你两种靠谱的解决方式:

方法一:全局自定义ListView组件(推荐)

这种方式会修改所有One2Many列表的复选框行为,适合全局需要这个功能的场景。

  1. 创建自定义模块
    新建一个模块(比如命名为web_single_click_checkbox),在模块目录下创建以下文件:

  2. 编写JS逻辑
    在static/src/js/list_view.js中添加如下代码:

    odoo.define('web_single_click_checkbox.list_view', function(require) {
        "use strict";
    
        var ListView = require('web.ListView');
    
        ListView.include({
            _onRowClicked: function (event) {
                // 判断点击目标是否是复选框或其所在的选择列
                var $target = $(event.target);
                if ($target.is('input[type="checkbox"]') || $target.closest('td.o_list_record_selector').length) {
                    // 阻止事件冒泡,避免触发行选中逻辑
                    event.stopPropagation();
                    // 手动切换复选框状态并触发change事件通知Odoo后台
                    var checkbox = $target.is('input[type="checkbox"]') ? $target : $target.find('input[type="checkbox"]');
                    checkbox.prop('checked', !checkbox.prop('checked'));
                    checkbox.trigger('change');
                } else {
                    // 非复选框区域保持原有行点击逻辑
                    this._super.apply(this, arguments);
                }
            },
        });
    
    });
    
  3. 配置模块清单
    在__manifest__.py中加载这个JS文件:

    {
        'name': 'Single Click Checkbox for One2Many',
        'version': '1.0',
        'depends': ['web'],
        'data': [],
        'qweb': [],
        'js': [
            'static/src/js/list_view.js',
        ],
        'installable': True,
        'auto_install': False,
    }
    
  4. 安装模块
    把模块放到Odoo的addons目录,更新应用列表后安装即可。

方法二:针对特定表单的局部处理

如果只需要某个特定表单的One2Many字段实现单击复选框,可以直接在视图中嵌入JS脚本:

<field name="arch" type="xml">
    <form>
        <!-- 你的表单字段 -->
        <field name="your_one2many_field" widget="one2many_list">
            <!-- One2Many子视图内容 -->
        </field>

        <!-- 添加局部处理脚本 -->
        <script type="text/javascript">
            // 处理复选框点击
            $(document).on('click', '.o_list_view td.o_list_record_selector input[type="checkbox"]', function(e) {
                e.stopPropagation();
                var $checkbox = $(this);
                $checkbox.prop('checked', !$checkbox.prop('checked'));
                $checkbox.trigger('change');
            });
            // 处理复选框关联的label点击(Odoo会用label包裹复选框)
            $(document).on('click', '.o_list_view td.o_list_record_selector label', function(e) {
                e.stopPropagation();
                var $checkbox = $(this).find('input[type="checkbox"]');
                $checkbox.prop('checked', !$checkbox.prop('checked'));
                $checkbox.trigger('change');
            });
        </script>
    </form>
</field>

注意事项

  • 测试前记得清除浏览器缓存,避免旧的JS文件干扰;
  • 方法一的全局修改不会影响其他列表操作,只是拦截了复选框区域的行点击事件;
  • 两种方法都兼容Odoo 10的默认One2Many列表组件。

试试上面的方案,应该能完美解决双击的问题!

内容的提问来源于stack exchange,提问作者Pawan Kumar Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:37:13