如何在服务器上发送所有复选框值?

时间:2015-06-02 19:13:35

标签: angularjs

我的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

发送表单后

2 个答案:

答案 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;
}