Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ng grid shift select错误选择其他行_Javascript_Angularjs_Ng Grid - Fatal编程技术网

Javascript ng grid shift select错误选择其他行

Javascript ng grid shift select错误选择其他行,javascript,angularjs,ng-grid,Javascript,Angularjs,Ng Grid,签出我的plunker: 复制: 用鼠标左键单击选择第一行 使用ctrl+end滚动到底部行 使用shift+← 点击 应为:在选择“选择我…”之前的行 已观察:将选择其他行 注意:当滚动其他行时,会再次取消选择。我添加了类似的内容,并且效果良好: beforeSelectionChange: function() { var grid = angular.element('.ngGrid'); grid.data('alreadySelectedItems', grid.sco

签出我的plunker:

复制:

  • 用鼠标左键单击选择第一行
  • 使用ctrl+end滚动到底部行
  • 使用shift+← 点击
  • 应为:在选择“选择我…”之前的行
  • 已观察:将选择其他行

  • 注意:当滚动其他行时,会再次取消选择。

    我添加了类似的内容,并且效果良好:

    beforeSelectionChange: function() {
        var grid = angular.element('.ngGrid');
        grid.data('alreadySelectedItems', grid.scope().selectedItems);
        return true;
    },
    afterSelectionChange: function (rowItem) {
        if (rowItem.selected === true) {
        } else if (rowItem.selected === false) {
        } else if (rowItem.length > 0) {
            var selectedIds = [],
                grid = angular.element('.ngGrid'),
                renderedRows = grid.scope().renderedRows,
                alreadySelectedItems = grid.data('alreadySelectedItems') || [];
            angular.forEach(rowItem, function (row) {
                if (row.selected === true) {
                    selectedIds.push(row.entity.Id);
                }
            });
            angular.forEach(renderedRows, function (row) {
                if (selectedIds.indexOf(row.entity.Id) === -1 && alreadySelectedItems.indexOf(row.entity) === -1) {
                    row.selected = false;
                }
            });
            grid.removeData('alreadySelectedItems');
        }
    }
    

    Ui网格使用两个索引:一个用于真实列表,另一个用于可视可访问行。这看起来是一种奇怪的行为,滚动在视觉上检查了太多的行,而在实际列表中检查了权限行。Avec一些滚动它更新的视觉检查。您是否尝试在ui网格github上检查问题是否已报告?无法在ui网格上复制它哦抱歉,我误读了,以为您在ui网格上。。。但是你可以试试ui网格,也许?ng grid的github是否说明了这个问题?我也必须支持IE8,所以不能使用ui grid。github上没有提到这个问题。
    beforeSelectionChange: function() {
        var grid = angular.element('.ngGrid');
        grid.data('alreadySelectedItems', grid.scope().selectedItems);
        return true;
    },
    afterSelectionChange: function (rowItem) {
        if (rowItem.selected === true) {
        } else if (rowItem.selected === false) {
        } else if (rowItem.length > 0) {
            var selectedIds = [],
                grid = angular.element('.ngGrid'),
                renderedRows = grid.scope().renderedRows,
                alreadySelectedItems = grid.data('alreadySelectedItems') || [];
            angular.forEach(rowItem, function (row) {
                if (row.selected === true) {
                    selectedIds.push(row.entity.Id);
                }
            });
            angular.forEach(renderedRows, function (row) {
                if (selectedIds.indexOf(row.entity.Id) === -1 && alreadySelectedItems.indexOf(row.entity) === -1) {
                    row.selected = false;
                }
            });
            grid.removeData('alreadySelectedItems');
        }
    }