EasyUI DataGrid在updateRow会重新渲染该行,导致绑定的事件失效

因为在更新行数据时,EasyUI DataGrid 会重新渲染该行,导致之前绑定的事件失效。这是因为当您调用 updateRow 方法后,DataGrid 会重新生成该行的 HTML,而原有的事件绑定只作用于旧的 HTML 元素上。

为了解决这个问题,您可以采用事件委托的方式来绑定事件。事件委托是一种在父元素上监听事件的技术,然后根据事件的目标元素来执行相应的操作。由于父元素不会随着子元素的更新而改变,因此这种方法可以确保即使子元素被重新渲染,事件依然能够被触发。

有问题的代码:

javascript 复制代码
$('.checkbox-isuse').click(function (e) {
    console.log('click0')
    //获取点击复选框当前行的索引
    var $checkbox = $(this);
    var ix = $checkbox.closest('tr.datagrid-row').attr('datagrid-row-index');
    var row = data.rows[ix];

    var checked = $checkbox.prop("checked");// 获取当前复选框的选中状态
    var field = $checkbox.attr('data-field'); // 获取对应的字段名

    console.log(ix, checked, field, row)

    // 更新对应字段的值
    $('#gridBox-0').datagrid('updateRow', {
        index: ix,
        row: {
            [field]: checked ? 1 : 0
        }
    });

    e.stopPropagation();
});

使用事件委托的解决方案:

javascript 复制代码
onLoadSuccess: function (data) {
    // 使用事件委托方式绑定点击事件
    $('#gridBox-0').datagrid('getPanel').off('click', '.checkbox-isuse').on('click', '.checkbox-isuse', function(e) {
        var $checkbox = $(this);
        var index = $checkbox.closest('tr.datagrid-row').attr('datagrid-row-index');
        var field = $checkbox.attr('data-field'); // 获取对应的字段名
        var checked = $checkbox.prop('checked'); // 获取当前复选框的选中状态

        // 更新对应字段的值
        $('#gridBox-0').datagrid('updateRow', {
            index: parseInt(index),
            row: {
                [field]: checked ? 1 : 0
            }
        });

        // 阻止事件冒泡
        e.stopPropagation();
    });
},

在这个示例中,我们使用 $('#gridBox-0').datagrid('getPanel') 来获取 DataGrid 的面板元素,并在这个元素上绑定点击事件。off('click', '.checkbox-isuse') 是为了避免重复绑定事件,每次 onLoadSuccess 被调用时先移除之前的事件绑定。

这种方式可以确保即使行被重新渲染,事件依然能够被正确触发。您应该在 onLoadSuccess 回调中使用这种方式来绑定复选框的点击事件。

相关推荐
2601_94980959几秒前
flutter_for_openharmony家庭相册app实战+我的Tab实现
java·javascript·flutter
Up九五小庞11 分钟前
开源埋点分析平台 ClkLog 本地部署 + Web JS 埋点测试实战--九五小庞
前端·javascript·开源
摘星编程35 分钟前
React Native + OpenHarmony:UniversalLink通用链接
javascript·react native·react.js
qq_177767371 小时前
React Native鸿蒙跨平台数据使用监控应用技术,通过setInterval每5秒更新一次数据使用情况和套餐使用情况,模拟了真实应用中的数据监控场景
开发语言·前端·javascript·react native·react.js·ecmascript·harmonyos
烬头88211 小时前
React Native鸿蒙跨平台应用实现了onCategoryPress等核心函数,用于处理用户交互和状态更新,通过计算已支出和剩余预算
前端·javascript·react native·react.js·ecmascript·交互·harmonyos
程序员清洒3 小时前
Flutter for OpenHarmony:Text — 文本显示与样式控制
开发语言·javascript·flutter
雨季6663 小时前
Flutter 三端应用实战:OpenHarmony 简易“动态内边距调节器”交互模式深度解析
javascript·flutter·ui·交互·dart
天人合一peng3 小时前
Unity中button 和toggle监听事件函数有无参数
前端·unity·游戏引擎
会飞的战斗鸡4 小时前
JS中的链表(含leetcode例题)
javascript·leetcode·链表
方也_arkling4 小时前
别名路径联想提示。@/统一文件路径的配置
前端·javascript