花了1天时间在看,请大家帮忙看看这段代码,不知道为什么会一直递归??

$(document).on("click",".layui-table-body table.layui-table tbody tr", function (e) {

        click_flag = false;
        
        var index = $(this).attr('data-index');
        var tableBox = $(this).parents('.layui-table-box');

        if (tableBox.find(".layui-table-fixed.layui-table-fixed-l").length > 0) {
            tableDiv = tableBox.find(".layui-table-fixed.layui-table-fixed-l");
        } else {
            tableDiv = tableBox.find(".layui-table-body.layui-table-main");
        }
        var checkCell = tableDiv.find("tr[data-index=" + index + "]").find("td div.laytable-cell-checkbox div.layui-form-checkbox I");


        if (checkCell.length > 0) {

            setTimeout(function(){
                if(click_flag == true){
                    return;
                }

                checkCell.click();
                console.log("单击1111113333");

            },200);
            // checkCell.click();
        }

    });     

这段代码,在很多页面都能正常使用,是一个表格,点击行,选中的复选框的代码,

但是在某一个页面中,不知道为什么,会一直在递归,不停的调用,我注释了很多代码,花了一天时间,都没找到原因

阅读 2k
2 个回答

dom结构没有列出来,大概率是checkCell.click()触发tr内复选框的点击事件,然后点击事件又冒泡到这个tr上了,需要给复选框(或其父级至tr子级的某个元素)加上阻止冒泡的代码

既然不知道那就打断点呀,通过堆栈来看从哪里进来的,另外为什么要加setTimeout?如果是一个循环,你这个值可能会有问题,都打印出来并且断点看看。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题