2015-02-19 17 views

risposta

1

Sì, è possibile, si dovrebbe provare questo:

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

Ciao, grazie per la risposta. Ho provato il codice sopra ma non riesco ancora a eseguire la convalida del modulo. Non vengono restituiti errori javascript e se provo ad avvisare il risultato mi ha dato "undefiend". – AleCat83

+0

Questo metodo convalida gli input del modulo e visualizza gli errori corrispondenti, non restituisce nulla ... – soju

+1

Posso caricare altre configurazioni o risorse per farlo funzionare? Ho provato a eseguire il codice precedente (con il mio ID modulo) ma la convalida non viene eseguita .. – AleCat83

5

credo di essere un po 'in ritardo con una risposta qui, ma ho appena avuto la stessa domanda e la soluzione da soju non ha funzionato neanche per me .

Così ho guardato un po 'più in profondità il codice JS di ActiveForm e ho scoperto che sembra monitorare lo stato di ogni campo in una variabile e se il campo è "intatto" la convalida non viene attivata, a meno che non invii il forma attuale. Così ho cambiato la mia chiamata a questo:

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

Questo ora sembra funzionare come mi aspetto.

+1

Non sono sicuro del motivo per cui questa risposta non è accettata poiché è la prima cosa che ha funzionato come previsto. – Edna

2

Grazie zed blu, ma prima di questo - da aggiungere campo modulo, u bisogno di fare questa roba ...

// il vostro input

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

// questo rimuovere riga successiva & convertire le doppie virgolette con quotazioni singole

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

// quindi aggiungere come questo

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

// questo ha lavorato per me insieme con la soluzione Zend blu come questo qui sotto

$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

questo è lavorato per me

$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

Possiamo ottenere che attraverso la fusione @BlueZed e @S La risposta di Rana.

È possibile scrivere sotto lo script, in modo che possiamo verificare che se il modulo ha qualche errore in esso, il modulo non verrà inviato (Anche Funzionerà per modulo tabellare (procedure guidate)).

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

    if ($("#form").find(".has-error").length) { 
     return false; 
    } 
0

La convalida viene attivata quando si invia il modulo. Così, questo funzionerà:

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

Il secondo argomento validate è chiamato forceValidate.

0

Per convalidare manualmente da javascript, è necessario inserire il seguente codice alla fine del modulo di invio evento.

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

Per gli utenti alle prime armi,

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

Si noti inoltre che è necessario specificare form id sul ActiveForm come qui di seguito

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

ho avuto lo stesso problema. E non sono chiaramente una soluzione nella documentazione ufficiale e non so perché nessuna soluzione su Stackoverflow non funzioni per me. Possono essere nelle diverse versioni di yii2 ci sono diversi modi per farlo. Ho impiegato molto tempo per trovare una soluzione. Nel mio caso ho innescato la convalida per l'ingresso individuale sul modulo:

$('#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' 

prega di notare secondo parametro della funzione yiiActiveForm() non è il selettore e non è il nome di un attributo è id di ingresso di attributo! !!

Problemi correlati