Odoo10 one2many字段复选框需双击选中问题求助
解决Odoo 10 One2Many字段复选框需双击的问题
嘿,这个问题我在Odoo 10开发时也踩过坑!默认情况下One2Many列表的复选框需要双击才能选中,核心原因是Odoo的列表行点击事件会先抢占焦点(选中整行),第二次点击才会触发复选框的状态切换。下面给你两种靠谱的解决方式:
方法一:全局自定义ListView组件(推荐)
这种方式会修改所有One2Many列表的复选框行为,适合全局需要这个功能的场景。
创建自定义模块
新建一个模块(比如命名为web_single_click_checkbox),在模块目录下创建以下文件:编写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); } }, }); });配置模块清单
在__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, }安装模块
把模块放到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
相关产品推荐
相关产品推荐

