我有一个选择的复选框项目,我想将它们放入 Bootstrap 5 手风琴元素中。复选框项目在打开时工作正常(选中复选框将项目添加到数组中;取消选中它们将从数组中删除项目),但是当我将它们放入手风琴元素中时,它们不起作用(选中复选框不会执行任何操作;取消选中它们将项目添加到数组中)。
这是代码本身。
<form class = "list">
<div class="form-check" ng-repeat="x in people_list">
<a id="{{x.initial}}"></a>
<input class="form-check-input" type="checkbox" id={{x.id}} ng-click="clickPeople(x.id, x.names)" ng-checked="checkall" ng-model="x.Selected">
<label class="form-check-label" for={{x.id}}>{{x.names}} ({{x.tag_link_count}})</label>
</div>
</form>
这是插入到手风琴元素中的代码。
<div class="accordion" id="accordionExample">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
Select Tags to Search For
</button>
</h2>
<div id="collapseOne" class="accordion-collapse collapse" data-bs-parent="#accordionExample">
<div class="accordion-body">
<form class = "list">
<div class="form-check" ng-repeat="x in tags">
<a id="{{x.initial}}"></a>
<input class="form-check-input" type="checkbox" id={{x.id}} ng-click="clickPeople(x.id, x.names)" ng-checked="checkall" ng-model="x.Selected">
<label class="form-check-label" for={{x.id}}>{{x.names}} ({{x.tag_link_count}})</label>
</div>
</form>
</div>
</div>
</div>
</div>
这个 CodePen 包含我的复选框的工作和非工作示例(我的 JSFiddle 帐户似乎有问题)。
我在类似问题的答案中看到了有关停止点击事件传播的参考资料,但我无法全神贯注于如何使用我找到的示例来解决我的问题。任何帮助/指导将不胜感激。
干杯,比尔
好的,这些是所做的更改列表。
x
并以名称Selected
维护所选属性,然后使用它来验证该项目是否已选中。name
属性,但在对象中它的定义为 names
,所以我更改了 JS 代码以使用 names
!请在下面找到一个工作示例!
var app = angular.module("myApp", []);
var nonYearList = [];
var yearList = [];
var peopleList = [];
var eventList = [];
var holidayList = [];
var otherList = [];
var tagNameList = [];
app.controller("myCtrl", function($scope) {
$scope.tags = [{
"id": 2,
"names": "Clarence Gansemer",
"type": "2",
"tag_link_count": "1",
"initial": "C"
},
{
"id": 6,
"names": "Dave Anderson",
"type": "2",
"tag_link_count": "1",
"initial": "D"
},
{
"id": 3,
"names": "Dorothy Strong, Dorothy Gansemer",
"type": "2",
"tag_link_count": "2",
"initial": "D"
}
]
$scope.clickPeople = function(item) {
item.Selected = !item.Selected;
if (item.Selected) {
tagNameList.push(item.names)
$scope.tag_names = tagNameList;
} else {
var spot = nonYearList.indexOf(item.id);
if (spot != -1) {
nonYearList.splice(spot, 1);
}
var spot2 = peopleList.indexOf(item.id);
if (spot2 != -1) {
peopleList.splice(spot2, 1);
}
var spot3 = tagNameList.indexOf(item.names);
if (spot3 != -1) {
tagNameList.splice(spot3, 1);
}
}
}
});
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>RBT - Tag Search</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.8/angular.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css">
</head>
<body ng-app="myApp" ng-controller="myCtrl">
<br><br>
<h4>Checkboxes do not work inside accordion (checked names are not added to Selected Names list (unless they are checked and then un-checked))</h4>
<div class="accordion" id="accordionExample">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
Select Tags to Search For
</button>
</h2>
<div id="collapseOne" class="accordion-collapse collapse" data-bs-parent="#accordionExample">
<div class="accordion-body">
<form class="list">
<div class="form-check" ng-repeat="x in tags">
<a id="{{x.initial}}"></a>
<input class="form-check-input" type="checkbox" id={{x.id}} ng-click="clickPeople(x)" ng-checked="x.Selected" ng-model="x.Selected">
<label class="form-check-label" for={{x.id}}>{{x.names}} ({{x.tag_link_count}})</label>
</div>
</form>
</div>
</div>
</div>
</div>
<div>
<br>
<h4>Selected Names</h4>
<div ng-repeat="name in tag_names"><span style="margin-left:25px;margin-right:5px" class="badge rounded-pill bg-primary"> </span> {{name.replace('Unknown','Unknown Year')}}</div>
</div>