2017-10-17 61 views
2

我有兩個複選框。如果您單擊複選框B,則也必須選中複選框A.但在我的代碼中,當我點擊複選框B時,複選框A也被選中。但複選框A的ng模型不會將其值從false更改爲true。有人可以幫我弄這個嗎?先謝謝你!這裏是我下面的代碼:(嘗試運行的代碼片段)AngularJS - 如何通過選中另一個複選框來將複選框的值設置爲true?

<div ng-app="myApp" ng-controller="myCtrl"> 
 
    Box a 
 
    <input type="checkbox" ng-checked="box2" ng-model="box1">{{box1}}<br /> 
 
    Box b 
 
    <input type="checkbox" ng-model="box2"> {{box2}} 
 
    </div> 
 

 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script> 
 
    <script> 
 
    var app = angular.module('myApp', []); 
 
      app.controller('myCtrl', function ($scope) { 
 
\t  $scope.box1 = false; 
 
      $scope.box2 = false; 
 
      }); 
 
    </script>

回答

0

@Commercial自殺具有良好回答。我還發現了另一種使用較少邏輯的方法。檢查下面的代碼:

<div ng-app="myApp" ng-controller="myCtrl"> 
 
    Box a 
 
    <input type="checkbox" ng-checked="box2" ng-model="box1">{{box1}}<br /> 
 
    Box b 
 
    <input type="checkbox" ng-click="click()" ng-model="box2"> {{box2}} 
 
    </div> 
 

 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script> 
 
    <script> 
 
    var app = angular.module('myApp', []); 
 
      app.controller('myCtrl', function ($scope) { 
 
\t  $scope.box1 = false; 
 
      $scope.box2 = false; 
 
      
 
      $scope.click = function() { 
 
       $scope.box1 = $scope.box2; 
 
      }; 
 
      }); 
 
    </script>

0

通相同的變量爲兩個輸入框NG-模型

<div ng-app="myApp" ng-controller="myCtrl"> 
 
    Box a 
 
    <input type="checkbox" ng-checked="box2" ng-model="box1">{{box1}}<br /> 
 
    Box b 
 
    <input type="checkbox" ng-model="box2" ng-change="onChange()"> {{box2}} 
 
    </div> 
 

 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script> 
 
    <script> 
 
    var app = angular.module('myApp', []); 
 
      app.controller('myCtrl', function ($scope) { 
 
\t  $scope.box1 = false; 
 
      $scope.box2 = false; 
 
      $scope.onChange= function(){ 
 
       $scope.box1= $scope.box2;  
 
      }; 
 
      }); 
 
      
 
    </script>

+0

好一點,但複選框中需要有一個獨立的變量,因爲它可以在不復選框B. Only選擇B的幫助下進行檢查是依賴於複選框A. –

+0

@JPDolocanog更新了我的答案。 –

0

基本上,ng-checked不會更改$scope.box1的值。 你可以做的是顯示{{box2 || box1}},而不是{{box1}}

+0

這就是我現在意識到的。我一直被這個問題所迷惑。因爲我將這些值存儲到我的數據庫中,所以我確實需要更新ng模型。 –

1

一種解決方案可以在一個change事件處理程序附加到第二checkbox和改變這個方法裏面的box1's範圍。

<div ng-app="myApp" ng-controller="myCtrl"> 
 
    Box a 
 
    <input type="checkbox" ng-checked="box2" ng-model="box1">{{box1}}<br /> 
 
    Box b 
 
    <input type="checkbox" ng-change="change()" ng-model="box2"> {{box2}} 
 
    </div> 
 

 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script> 
 
    <script> 
 
    var app = angular.module('myApp', []); 
 
       app.controller('myCtrl', function ($scope) { 
 
\t  $scope.box1 = false; 
 
      $scope.box2 = false; 
 
      $scope.change=function(){ 
 
       $scope.box1=$scope.box2; 
 
      } 
 
      }); 
 
    </script>

一單建議:

ng-modelng-checked沒有意味着使用一起

ng-checked期待一個表達式,所以通過說ng-checked="true",你基本上說,複選框將始終被檢查。

您應該只能使用ng-model,綁定到模型上的boolean屬性。

+0

感謝您的回答@ alexandru-lonut Mihai。我也發現了類似的方法。 –

+0

@JPDolocanog,ng-checked不會改變ng-model ..所以你必須手動完成。 –

+0

@ Alexandru-lonutMihai注意到。感謝您提供豐富的建議! –

1

您可以添加BOX2指令ng-change,它將調用的功能,在這裏您可以以編程方式更改BOX1的價值,就像這樣:

<div ng-app="myApp" ng-controller="myCtrl"> 
 
    Box a 
 
    <input type="checkbox" ng-checked="box2" ng-model="box1">{{box1}}<br /> 
 
    Box b 
 
    <input type="checkbox" ng-model="box2" ng-change="checkBox1()"> {{box2}} 
 
</div> 
 

 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script> 
 
<script> 
 
    var app = angular.module('myApp', []); 
 
    app.controller('myCtrl', function ($scope) { 
 
    $scope.box1 = false; 
 
    $scope.box2 = false; 
 
    $scope.checkBox1 = function() { 
 
     $scope.box1 = $scope.box2; 
 
    } 
 
    }); 
 
</script>

+0

感謝您的回答@商業自殺。我在編輯之前發佈了我的答案。但仍然是一個很好的答案。 –

+0

@JPDolocanog,謝謝,很高興聽到,它有幫助 –