我的HTML代码是由Angular JS通过ng-repeat
:
<li ng-repeat="(key, item) in data.conditions_list" ng-class="{active: item.active}">
<span class="sbrand-checkbox">
<input ng-checked="item.active" type="checkbox" ng-model="formData.conditions[item.id]">
</span>
<label>{{item.name}}</label>
</li>
如果ng-checked="item.active"
,此代码会设置活动状态的复选框。它有效。
当我选中任何未经检查的元素并使用默认格式提交时,我会看到:
["conditions"]=>
array(1) {
[5]=>
string(4) "true"
}
所以,这意味着只发送了我已经解雇的复选框。其他人没有在服务器上发送。
我可以这样做:
HTML:
<input ng-checked="isChecked(item.active, item.id)" type="checkbox" ng-model="formData.conditions[item.id]">
Angular JS:
$scope.isChecked = function (item, id){
if(item.active){
$scope.formData.conditions[id];
}
};
使用$scope.formData.conditions
答案 0 :(得分:0)
这就是浏览器的行为方式。它不提交未选中的复选框值。它与angularJs或Javascript无关。
您可以将请求中缺少复选框值视为未选中的服务器。
另一种方法是为每个复选框维护隐藏字段,并在复选框更改时设置其值,并将这些隐藏字段提交给服务器而不是复选框。
答案 1 :(得分:0)
我喜欢棱角分明但是当涉及到复选框和收音机盒时,它们很臭。我会求助于jquery。插入包含输入的dom元素,您将返回一组值:
function getChecked(dom) {
var boxes = $(dom).find('input[type="checkbox"]').map(function()
{
return $(this).prop("checked")
}
);
return boxes;
}