如何使用复选框而不是单击事件来选择列表框中的值
how to select the values in a list box with the use of checkboxes instead of click event
我有一个包含对象列表的列表框。我有一个与列表元素相对应的复选框列表。单击复选框时,应选择或取消选择列表中的相应值,而无需手动选择列表。所有复选框都应该发生这种情况。我正在通过angularjs实现这个功能。
这是我迄今为止写的代码。我可以进行选择,但每次只进行一次选择。我想要列表上的多项选择。
<!DOCTYPE html>
<html lang="en">
<head>
<title>AngularJS Listbox with Checkbox3</title>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>
<link type="text/css" rel="stylesheet" href="styles.css"></link>
<script>
var app = angular.module('myapp', []);
app.controller('controller', function($scope) {
$scope.months = [{name: 'January', selected: false},
{name: 'February', selected: false},
{name: 'March', selected: false},
{name: 'April', selected: false},
{name: 'May', selected: false},
{name: 'June', selected: false},
{name: 'July', selected: false},
{name: 'August', selected: false},
{name: 'September', selected: false},
{name:'October', selected: false},
{name: 'November', selected: false},
{name: 'December', selected: false}];
$scope.selection=[];
// toggle selection for a given month by name
$scope.toggleSelection = function toggleSelection(name) {
var idx = $scope.selection.indexOf(name);
var count = 0;
// is currently selected
if (idx > -1) {
$scope.selection.splice(idx, 1);
for(var i=0; i<$scope.months.length; i++)
{
var obj = $scope.months[i];
if(obj.name == name)
{
count++;
$scope.isSelected = function isSelected(monthName, selected)
{
if(monthName == name)
{
selected = false;
console.log(count+'. '+name+' '+selected+''n');
return selected;
}
}
}
}
}
// is newly selected
else {
$scope.selection.push(name);
for(var i=0; i<$scope.months.length; i++)
{
var obj = $scope.months[i];
if(obj.name == name)
{
count++;
$scope.isSelected = function isSelected(monthName, selected)
{
if(monthName == name)
{
selected = true;
console.log(count+'. '+name+' '+selected+''n');
return selected;
}
}
}
}
}
};
});
</script>
</head>
<body ng-app="myapp">
<div class="box" ng-controller="controller">
<div align="center">
<h1>AngularJS Listbox with Checkbox3</h1>
<select style="width: 100%;" size="7" ng-model="items" multiple >
<!-- ng-options="month.name as month.name for month in months"> -->
<option ng-repeat="month in months" value="{{month.name}}" ng-selected="isSelected(month.name, month.selected)">
{{month.name}}
</option>
</select>
</div>
<br>
<div class="panel">
<div ng-repeat="month in months">
<div class="action-checkbox">
<input id="{{month.name}}" type="checkbox" value="{{month.name}}" ng-checked="selection.indexOf(month.name) > -1"
ng-click="toggleSelection(month.name)" ng-model="check"/>
<label for="{{month.name}}"></label>{{month.name}}<span> {{check}}</span>
</div>
</div>
<br>
<!-- SELECTED ITEMS -->
<span style="color:black;" class="selected-item">Selected Items:</span>
<div ng-repeat="name in selection" class="selected-item">{{name}}</div>
</div>
<h3>You have selected: {{items}}</h3>
</div>
</body>
</html>
提前谢谢。
问题出在isSelected
函数上。作为一种可以帮助您解决问题的变通方法,您可以将if (monthName == name)
替换为if($scope.selection.indexOf(monthName) !== -1)
。
只要重读一遍——是的,mic4ael是对的。在循环的每次迭代中,您实际上都在踩踏isSelected函数的版本/实例。
这意味着你可以使用他的建议,并有效地将其从两个不同的循环中去除。我无法对他的帖子发表评论。
相关文章:
- Angular:使用选择列表选择过滤代码中的对象
- JavaScript类列表选择器错误
- 将下拉列表“选择值”传递到 URL
- 禁用基于下拉列表选择 asp.net JavaScript 启用文本框
- 下拉列表<选择>为列表.js
- 经典 ASP - 下拉列表:选择与第一个下拉列表具有相同值的所有下拉列表
- 映射下拉列表选择到URL
- 删除基于先前下拉列表选择的“选择下拉列表”选项
- 在下拉列表选择中显示模态
- 下拉列表选择的值在UI淘汰js中没有更新
- 如何将 ID 分配给动态下拉列表选择
- 使用 dojo 将鼠标悬停在动态下拉列表选择上时添加工具提示
- 链接下拉列表选择列表代码 -- 连接数据
- Javascript 不遵循下拉列表选择
- 检索引导下拉列表选择文本
- 表单事件更改不适用于下拉列表选择
- 无法检测加载时的选择/下拉列表选择事件
- 将 CakePHP 命名参数添加到列表选择的 URL 中
- 为什么聚合物核心列表选择中的切换操作不正确
- 为列表选择类并仅设置其中一个类