gpt4 book ai didi

javascript - AngularJS:如何使用 shift 和鼠标单击来选择多个复选框?

转载 作者:搜寻专家 更新时间:2023-11-01 05:20:42 25 4
gpt4 key购买 nike

是否可以使用 shift 和鼠标单击来使用 AngularJS 选择表格中的多个元素?

我有一个表格,其中第一列是一个复选框,我想使用 SHIFT 键和鼠标单击来连续选择多行,并且可以执行删除、编辑等操作。

示例步骤:

  1. 点击第一行的复选框。
  2. 按住 SHIFT 键。
  3. 点击第 10 行的复选框。

结果:将选择前 10 行。

有谁知道如何使用 AngularJS 完成此操作?

最佳答案

我也有类似的需求。虽然更新复选框的正确方法确实是直接更新模型,但我想要一个更通用的解决方案。

所以我构建了一对指令,这样我就可以在任何复选框列表上重复使用它。基本上你用 <multi-checkbox-container> 包装所有的复选框然后添加 multi-checkbox属性到每个复选框。代码完成剩下的工作。简单易行。

angular
.module('app', [])
.controller('MainController', function($scope) {
var vm = this;

$scope.checks = {};
$scope.botigues = [1, 2, 3, 4, 5, 6];

})
.component('multiCheckboxContainer', {
controller: function () {
var ctrl = this;
var checkboxes = [];
var checkboxModels = [];
var previousClickedCheckbox = null;

ctrl.addCheckbox = addCheckbox;
ctrl.onCheckboxClick = onCheckboxClick;

function addCheckbox(checkbox, checkboxModelCtrl) {
checkboxes.push(checkbox);
checkboxModels.push(checkboxModelCtrl);
}

function onCheckboxClick(checkbox, shiftKey) {
var start, end, i, checking;
if (shiftKey && previousClickedCheckbox) {
checking = checkbox.prop('checked')
start = checkboxes.indexOf(previousClickedCheckbox);
end = checkboxes.indexOf(checkbox);
if (start > end) {
start = start + end;
end = start - end;
start = start - end;
}
for (i = start; i <= end; i++) {
checkboxes[i].prop('checked', checking);
checkboxModels[i].$setViewValue(checking);
}
}
previousClickedCheckbox = checkbox;
}
}
})
.directive('multiCheckbox', function () {
return {
restrict: 'A',
require: ['^^multiCheckboxContainer', 'ngModel'],
link: function (scope, element, attrs, controllers) {
var containerCtrl = controllers[0];
var ngModelCtrl = controllers[1];
containerCtrl.addCheckbox(element, ngModelCtrl);

element.on('click', function (ev) {
containerCtrl.onCheckboxClick(element, ev.shiftKey);
});
}
};
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.2/angular.min.js"></script>
<div ng-app="app" ng-controller="MainController as vm">
<multi-checkbox-container>
<div ng-repeat="botiga in botigues">
<input type="checkbox" multi-checkbox ng-model="checks[botiga]">
<label>Botiga {{botiga}}</label>
</div>
</multi-checkbox-container>
<p>checks = {{ checks }}</p>
</div>

关于javascript - AngularJS:如何使用 shift 和鼠标单击来选择多个复选框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41895108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com