2015-03-04 10 views
5

Mam trudną formę w widoku yii2, gdzie niektóre pola pokazują się lub ukrywają. Decyduje o wyborze pola użytkownika, wybiera opcje w formularzu. Piszę tę logikę frontendu z niestandardowym plikiem jquery. Wszystko w porządku. Ale kiedy składam formularz - ukryte pola pozostają bez sprawdzania poprawności i nic się nie dzieje. Jak mogę zabić walidację frontronu, kiedy pola są hiidenowe i włączyć je, kiedy pola są widoczne?Jak włączyć wyłączenie formularza frontend dla niektórych pól w yii2?

Odpowiedz

11

Aby wyłączyć sprawdzanie poprawności strony klienta. Rozpocznij aktywną formę w ten sposób.

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

Można spróbować ustawić domyślne wartości atrybutów, które nie są ustawione:

[ 
    // 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

Można również używać walidacji warunkowy po stronie klienta z "whenClient" opcji przy określaniu cię walidatory:

Od instrukcji:

Jeśli trzeba także wsparcie po stronie klienta walidacji warunkową, ty należy skonfigurować właściwość whenClient który pobiera ciąg reprezentującą funkcję JavaScript, którego wartość określa zwrot czy zastosować regułę czy nie. Na przykład,

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

Powoduje to ponowne załadowanie strony, a następnie pojawi się komunikat sprawdzania poprawności. Czy możemy zapobiec ładowaniu strony? –

+0

dzięki za wspaniałą pomoc kumpla –

8

można ustawić aktywne pole przy użyciu tego kodu: (nie active record, activefield dokładnie)

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

Aby usunąć pole z walidacji:

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

Aby dodać pole do listy sprawdzania poprawności:

$('#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"}); 
     } 
    }); 

I nie zapomnij warunkowego sprawdzania poprawności w swoim modelu. More info

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

Klasa ActiveField ma właściwość enableClientValidation, można po prostu ustawić tę właściwość do false jeśli chcesz wyłączyć clientValidation tworzą kilka pól.

Powiązane problemy