2015-03-04 17 views
5

Ho una forma difficile nella vista yii2, dove alcuni campi mostrano o nascondono. Decide dalle selezioni del campo utente, seleziona le opzioni nel modulo. Scrivo questa logica frontend con un file jQuery personalizzato. Va tutto bene. Ma quando invio la form - i campi nascosti rimangono senza convalida e nulla è successo. Come posso uccidere la convalida del feedback, quando i campi sono hiiden e accenderlo, quando i campi sono visibili?Come attivare la convalida del modulo di frontend off per alcuni campi in yii2?

risposta

11

Per disabilitare la convalida del lato client. Inizia la tua forma attiva in questo modo.

ActiveForm::begin(['enableClientValidation'=>false]); 
8

Si può provare a impostare valori di default per gli attributi che non sono impostati:

[ 
    // set "username" and "email" as null if they are empty 
    [['username', 'email'], 'default'], 

    // set "level" to be 1 if it is empty 
    ['level', 'default', 'value' => 1], 
] 

more info here

È inoltre possibile utilizzare la convalida condizionale lato client con "whenClient" opzione quando si definisce si validatori:

Dal manuale:

Se hai bisogno anche di supportare la convalida condizionale sul lato client, si necessario configurare la proprietà whenClient che prende una stringa che rappresenta una funzione JavaScript il cui valore di ritorno determina se applicare la regola oppure no. Ad esempio,

[ 
    ['state', 'required', 'when' => function ($model) { 
     return $model->country == 'USA'; 
    }, 'whenClient' => "function (attribute, value) { 
     return $('#country').val() == 'USA'; 
    }"], 
] 
+0

Ricarica la pagina e viene visualizzato il messaggio di convalida. Possiamo impedire il caricamento della pagina? –

+0

grazie per l'aiuto fantastico amico –

8

È possibile impostare il campo attivo utilizzando questo codice: (non active record, activefield esattamente)

$activeField = $form->field($model, 'someField'); 
$activeField->enableClientValidation=false; 
$activeField ->enableAjaxValidation=false; 
0

Per rimuovere un campo da convalida:

$('#yourFormID').yiiActiveForm('remove', 'yourinputID'); 

Per aggiungere un campo all'elenco di convalida:

$('#yourFormID').yiiActiveForm('add', { 
id: 'country', 
     name: 'yourinputID', 
     container: '.field-inputID', //or your cllass container 
     input: '#yourinputID', 
     error: '.help-block', //or your class error 
     validate: function (attribute, value, messages, deferred, $form) { 
      yii.validation.required(value, messages, {message: "Validation Message Here"}); 
     } 
    }); 

E non dimenticare la convalida condizionale nel modello. More info

7
$form->field($model, 'youAttribute', ['enableClientValidation' => false])->textInput(); 

La classe ActiveField ha una proprietà enableClientValidation, si può semplicemente impostare questa proprietà false se si desidera disabilitare clientValidation formare alcuni campi.

Problemi correlati