2015-02-19 12 views

Antwort

1

Ja, es ist möglich, sollten Sie versuchen, diese:

$('#form-id').yiiActiveForm('validate'); 
+0

Hallo, danke für die Antwort. Ich habe den obigen Code ausprobiert, aber ich kann die Formularvalidierung immer noch nicht ausführen. Es werden keine JavaScript-Fehler zurückgegeben und wenn ich versuche, das Ergebnis zu melden, habe ich "undefiend" erhalten. – AleCat83

+0

Diese Methode validiert Ihre Formulareingaben und zeigt entsprechende Fehler an, es gibt nichts zurück ... – soju

+1

Kann ich einige andere Konfigurationen oder Assets laden, damit es funktioniert? Ich habe versucht, den oben genannten Code (mit meiner Formular-ID) auszuführen, aber die Validierung wird nicht ausgeführt .. – AleCat83

5

Ich glaube, ich ein bisschen spät mit einer Antwort hier bin, aber ich hatte nur die gleiche Frage, und die Lösung von Soju für mich nicht funktioniert entweder .

Also schaute ich ein wenig tiefer in den JS-Code von ActiveForm und fand, dass es den Status jedes Feldes in einer Variablen zu überwachen scheint und wenn das Feld "unberührt" ist, wird die Validierung nicht ausgelöst, es sei denn, die tatsächliche Form. Also änderte ich meinen Anruf zu diesem:

var $form = $("#my-form"), 
    data = $form.data("yiiActiveForm"); 
$.each(data.attributes, function() { 
    this.status = 3; 
}); 
$form.yiiActiveForm("validate"); 

Dies scheint jetzt zu funktionieren, wie ich es erwarte.

+1

Ich bin mir nicht sicher, warum dies nicht akzeptiert Antwort, da es das erste ist, was es wie erwartet funktioniert hat. – Edna

2

Dank blau zed, aber bevor diese - Formularfeld anhängen, müssen u dieses Zeug tun ...

// Ihre Eingabe

$inputData = $form->field($model,"prductName"); 

// diese nächste Zeile entfernen & konvertieren doppelte Anführungszeichen zu einfachen Anführungszeichen

$newInputData= trim(preg_replace('/\s+/', ' ',str_replace('"',"'", $inputData))); 

// dann anhängen wie diese

$("#table").append("'.$newInputData.'"); 

// dies für mich wie diese zusammen mit blauen zend Lösung arbeitete unter

$this->registerJs(' 
    $(document).on("click","input[type=text]",function(){ 
      var $form = $("#w0"), 
      data = $form.data("yiiActiveForm"); 
      $.each(data.attributes, function() { 
       this.status = 3; 
      }); 
      $form.yiiActiveForm("validate");   
    }); 
'); 
1

dies ist für mich gearbeitet

$this->registerJs(" 
     $('body').on('beforeSubmit', 'form#product-form', function() { 
      var form = $(this); 
      // return false if form still have some validation errors 
      if (form.find('.has-error').length) { 
        return false; 
      } 
      // submit form 
      $.ajax({ 
        url: form.attr('action'), 
        type: 'post', 
        data: form.serialize(), 
        success: function (response) { 

        } 
      }); 
      return false; 
     }); "); 
5

Das können wir erreichen, indem @BlueZed und @S verschmelzenden Ranas Antwort.

Sie können unten Skript schreiben, damit wir überprüfen können, ob Formular einen Fehler hat, dann Formular wird nicht übergeben (auch es wird für tabellarische (Assistenten) wie Formular funktionieren).

0

Die Validierung wird beim Absenden des Formulars aktiviert. So wird diese Arbeit:

$form.data('yiiActiveForm').submitting = true; 
$form.yiiActiveForm('validate', false); 

Das zweite Argument für validate wird forceValidate genannt.

0

Um manuell von Javascript zu validieren, sollten Sie den folgenden Code an das Formularende-Ereignis senden.

return $('#your-form-id').yiiActiveForm('validate'); 

Für unerfahrene Anwender beachten

$('#your-form-id').submit(function() {  
    return $('#your-form-id').yiiActiveForm('validate'); 
}); 

Sie auch, dass Sie sich wie Form-ID auf ActiveForm unter

<?php $form = ActiveForm::begin(['id' => 'd4d-hub-form']); ?> 
1

Ich hatte das gleiche Problem geben sollte. Und das ist keine klare Lösung in der offiziellen Dokumentation und ich weiß nicht, warum eine Lösung auf Stackoverflow für mich nicht funktioniert. In den verschiedenen Versionen von yii2 gibt es verschiedene Möglichkeiten, dies zu tun. Ich habe viel Zeit gebraucht, um eine Lösung zu finden. In meinem Fall habe ich die Validierung für die individuelle Eingabe auf dem Formular ausgelöst haben:

$('#form-id').data('yiiActiveForm').submitting = false; 
$('#form-id').yiiActiveForm('validateAttribute', 'input-id'); //this will triger validation for input with id 'input-id' 
$('#form-id').yiiActiveForm('validateAttribute', 'other-input-id'); //this will triger validation for input with id 'other-input-id' 

beachten Sie bitte zweite Parameter der Funktion yiiActiveForm() ist es nicht Selektor ist, und es ist der Name nicht von Attribut ist es id Eingabe von Attribut! !!

Verwandte Themen