2014-08-29 9 views
25

C'è un modo per disabilitare un intero tag div in angularjs. Ho un tag div che contiene al suo interno diversi campi modulo che voglio disabilitare con una sola condizione. È possibile? Di seguito è riportato il mio codice. Ho provato a utilizzarlo ma non ha funzionato. Qualsiasi suggerimento sarebbe utile. Grazie, per favore vedi il codice qui sotto. Ho il tag div principale che contiene il modulo. Voglio disabilitare il modulo in base a una condizione, in modo che l'utente non possa inserire l'id e denominare i campi di testo.disabilitazione di un intero div in angularjs

risposta

6

è possibile creare facilmente la propria direttiva per questo, ciò disabiliterà tutti gli input all'interno dell'elemento (modulo nel caso);

yourModule.directive('disableForm',function(){ 

    return{ 
     scope:{ 
     disableForm:'=' 
     } 
     link:function(scope, element){ 
     if(scope.disableForm){ 
      angular.element('input',element).attr('disabled','disabled') ; 
     } 
     } 
    } 
    }); 

e in HTML,

<form name="form" role="form" novalidate disable-form="condition" ... 
+2

Grazie, ma questa soluzione non ha funzionato. – user3799365

1

Div non ha il concetto di disabilitazione. L'input ha un concetto di readonly. È possibile utilizzare l'attributo ng-readonly con legame alla variabile che determina se il modulo è di sola lettura

<input type="text" class="form-control" name="id" ng-model="study.id" ng-readonly="readMode">

+0

Questo non funziona, grazie per l'input però – user3799365

+0

Dovrebbe, controllare la documentazione per ng-readonly https://code.angularjs.org/1.2.15/docs/api/ng/directive/ngReadonly e c'è anche un esempio . – Chandermani

41

è possibile utilizzare 'fieldset' invece di 'div' e disabiliterà tutti gli elementi dei moduli all'interno se aggiungi ng-disabled ad esso. riporta qui di seguito:

<fieldset ng-disabled="true"> 
<label>ID</label> <input type="text" class="form-control" 
     name="id" ng-model="study.id"> 
<label>Name</label> <input type="text" class="form-control" 
     name="name" ng-model="study.name" ng-minlength=1 
     ng-maxlength=50 ng-required="true"> 
</fieldset> 
+0

Imposta l'attributo 'disabled' sul fieldset, che in realtà non disabilita i suoi elementi del modulo in IE 9 e sotto https://github.com/twbs/bootstrap/issues/8701 –

+0

Grazie per l'informazione! Lo contollerò. – Pavi

+0

Grazie mille. È lavoro per me –

0

Semplice, creare una variabile, ad esempio "disableAll" e l'uso ng-disabled = "disableAll" nei luoghi in cui si desidera controllare abilitare/disabilitare. Nell'esempio qui di seguito, ho modificato il codice originale e si può attivare e disattivare cambiando sotto la linea:

<div ng-init="disableAll=true" > 

ecco il codice:

<div ng-controller='myCtrl'> 

<div ng-init="disableAll=true" > 
<form name="form" role="form" novalidate 
class="ng-scope ng-invalid ng-invalid-required ng-dirty ng-valid-minlength" 
ng-submit="createStudy()" > 



<div class="form-group" > 
    <label>ID</label> <input type="text" class="form-control" 
     name="id" ng-model="study.id" ng-disabled="disableAll"> 
</div> 

<div class="form-group" > 
    <label>Name</label> <input type="text" class="form-control" 
     name="name" ng-model="study.name" ng-minlength=1 
     ng-maxlength=50 ng-required="true" ng-disabled="disableAll"> 
</div> 



<div class="modal-footer"> 
    <a href="#/studies"><button type="button" class="btn btn-default" 
     data-dismiss="modal" ng-click="clear()" ng-disabled="disableAll"> 
     <span class="glyphicon glyphicon-ban-circle"></span> Cancel 
    </button></a> 

    <button type="submit" ng-disabled="disableAll" 
     class="btn btn-primary"> 
     <span class="glyphicon glyphicon-save"></span> Save 
    </button> 
</div> 

</form> 
</div> 
</div> 
5

nella principale <div> si scrive:

<div ng-class="{'my-disable':condition}"> 

nel file css:

.my-disable{ 
    pointer-events:none; 
} 
+0

Questo ha funzionato perfettamente! Tuttavia, è un attributo CSS relativamente nuovo che [non è supportato nei browser più vecchi] (http://caniuse.com/#feat=pointer-events). – jessewolfe

+0

Questo non funzionerà se l'utente naviga o si sposta attraverso il campo utilizzando la scheda e digitare qualcosa. – PebblePicker

13

È possibile modificare il css/meno per disabilitare tutti gli elementi all'interno del disabile div.

Ad esempio:

impostare la classe .disabled in html:

<div ng-disabled="disableExpression" 
    ng-class="{'disabled': disableExpression}" 
> 
    <!-- content --> 
</div> 

stile il vostro disabilitato div:

.disabled{ 
    opacity: 0.5; 
    pointer-events: none; 

    > * { 
    opacity: 0.5; 
    pointer-events: none; 
    } 
} 
+0

Ancora accessibile tramite una tastiera –

Problemi correlati