如何在angularjs中单击按钮时选中复选框

时间:2014-06-02 19:06:22

标签: javascript angularjs checkbox

我想做这样的事情

 <input type="checkbox" ng-model="first" ng-click="chkSelect()"/><label>First</label>
 <input type="checkbox" ng-model="second" ng-click="chkSelect()"/><label>Second</label>
 <input type="checkbox" ng-model="third" ng-click="chkSelect()"/><label>Third</label>
 <input type="checkbox" ng-model="forth" ng-click="chkSelect()"/><label>Forth</label>
 <button>Selected</button>

点击按钮,我想显示所选的复选框labelname。

 $scope.chkSelect = function (value) {
     console.log(value);
 };

4 个答案:

答案 0 :(得分:1)

因为映射了复选框,所以可以在chkSelect()函数中引用$ scope.first,$ scope.second等。它也可以将一组复选框映射为单个数据数组,而不必为每个复选框命名。如果要生成复选框(可能来自一组数据),这很方便。

答案 1 :(得分:1)

我同意Bublebee Mans的解决方案。您已经详细说明了为什么要尝试获取标签的详细信息。无论如何,如果你真的想要它,你可以这样做:

$scope.chkSelect = function (value) {
    for(var key in $scope){
        var inputs = document.querySelectorAll("input[ng-model='" + key + "']");
        if(inputs.length){
            var selectedInput = inputs[0];
            var label = selectedInput.nextSibling;
            console.log(label.innerHTML);
        }
    };
};  

你可以搞砸它,看看它是否确实被选中了。

小提琴:http://jsfiddle.net/pzz6s/

旁注,对于任何知道角度的人,请原谅我。

答案 2 :(得分:0)

您希望控制器中包含以下内容(未经测试,在内存中工作):

$scope.checkBoxModels = [ { name: 'first', checked: false }, { name: 'second', checked: false }, { name: 'third', checked: false }, { name: 'fourth', checked: false } ];

然后在你看来:

<input ng-repeat"checkboxModel in CheckBoxModels" ng-model="checkBoxModel.checked" ng-click="chkSelect(checkBoxModel)" /><label>{{checkBoxModel.name}}</label>

然后更新你的功能:

$scope.chkSelect = function (checkBoxModel) {
    console.log(checkBoxModel.name);
};

答案 3 :(得分:0)

如果您正在处理服务器数据,则可能需要隔离的html块并仅在控制器中处理数据。

你可以通过在控制器中创建数组,也可以从响应中创建数据,并使用ngRepeat指令独立处理html代码。

以下是我告诉你的事情:

<强> HTML:

<form ng-controller="MyCtrl">
   <label ng-repeat="name in names" for="{{name}}">
       {{name}}
       <input type="checkbox"
              ng-model="my[name]"
              id="{{name}}"
              name="favorite" />
    </label>
    <div>You chose <label ng-repeat="(key, value) in my">
    <span ng-show="value == true">{{key}}<span>
    </label>
    </div>
</form>

<强>的Javascript

var myApp = angular.module('myApp',[]);

function MyCtrl($scope) {
$scope.names = ['pizza', 'unicorns', 'robots'];
$scope.my = { };
}