2014-11-17 23 views
5

Non sarei sorpreso se questo è un duplicato, ma non riesco a trovare nulla di semplice sulla falsariga di ciò di cui ho bisogno.Angular.js richiede almeno una casella di controllo

Tutto ciò di cui ho bisogno è che all'utente venga richiesto di scegliere almeno una casella di controllo, ma sono sconcertato su come ottenerlo.

<input type="checkbox" ng-model="myForm.first" /> First <br /> 
    <input type="checkbox" ng-model="myForm.second" />Second <br /> 
    <input type="checkbox" ng-model="myForm.third" /> Third 

risposta

6
<input type="checkbox" ng-model="myForm.first" ng-required="myForm.first || myForm.second || myForm.third" /> First <br /> 
<input type="checkbox" ng-model="myForm.second" ng-required="myForm.first || myForm.second || myForm.third"/>Second <br /> 
<input type="checkbox" ng-model="myForm.third" ng-required="myForm.first || myForm.second || myForm.third"/> Third 
+0

Ho provato questo approccio e ha scoperto che questo mi ha richiesto di selezionare nessuno o tutti i caselle di controllo. Nel caso in cui nessuno sia selezionato, ng-required è falso per tutti, rendendo la convalida riuscita. Se è selezionato solo il primo, tutte le caselle di controllo diventano obbligatorie e ciò causa il fallimento della convalida. Se tutto è selezionato, tutto è richiesto e la convalida ha esito positivo. – Binnut

+0

L'uso di '! (MyForm.first || myForm.second || myForm.third) sembra funzionare comunque. – Binnut

+1

e se hai 20 checkbox? questa soluzione è buona solo se hai solo alcuni – Nat

0

HTML

<div ng-app="myApp" ng-controller="myCrtl as myForm"> 
    <input type="checkbox" ng-required="myForm.selectedOptions" ng-model="myForm.selectedOptions.first" ng-change="myForm.onCheckBoxSelected()" /> First <br /> 
    <input type="checkbox" ng-required="myForm.selectedOptions" ng-model="myForm.selectedOptions.second" ng-change="myForm.onCheckBoxSelected()"/>Second <br /> 
    <input type="checkbox" ng-required="myForm.selectedOptions" ng-model="myForm.selectedOptions.third" ng-change="myForm.onCheckBoxSelected()"/> Third<br/> 
    <span style="color:red;" ng-if="!myForm.selectedOptions ">Required</span> 
</div>  

JS

angular.module('myApp',[]) 
    .controller('myCrtl',function(){ 
     var myForm=this; 
     myForm.onCheckBoxSelected=function(){ 

     var flag=false; 
     for(var key in myForm.selectedOptions){ 

      if(myForm.selectedOptions[key]){ 
       flag=true; 
      } 
     } 
     if(!flag){ 
      myForm.selectedOptions = undefined; 
     } 
    }; 

}); 

JS violino: http://jsfiddle.net/fodyyskr/

+0

Questo non è l'uso corretto di ng-required. Il tuo esempio può essere implementato senza ng-required in questo modo: http://jsfiddle.net/yzjugv90/ – britter

Problemi correlati