2014-06-13 12 views
9

Magento ha impressionante convalida biblioteca Javascript, che può essere inizializzato var myForm= new VarienForm('[your form id]', true);. Tuttavia questa funzione di convalida viene attivata quando si fa clic sul pulsante di invio.Come convalidare forma in Magento JavaScript durante la digitazione

Non C'è modo per convalidare campo particolare durante la digitazione. Per esempio, se si digita il codice postale a 2 cifre e andare a secondo campo, dovrebbe convalidare istantaneamente codice postale e l'errore spettacolo. Dato che il codice postale richiede almeno 5 cifre.

grazie

risposta

25

Sì, Magento fornisce una fantastica libreria di validazione. Puoi chiamare la convalida per ogni campo con il metodo `validate '.

Per esempio per convalidare il codice postale, è possibile osservare evento sfocatura e chiamare validate metodo.

$('billing:postcode').observe('change', function(e){ 
    Validation.validate($('billing:postcode')) 
}) 

Avviso Validation.validate($('billing:postcode')), questo chiamerà convalida per Cap campo.

+0

Quale sarebbe il codice assomigliare se vogliamo abilitare la convalida live per tutti i campi nella fase di fatturazione e spedizione? Di seguito è riportato il codice che sto usando attualmente, ma deve esserci un approccio più elegante ... https://gist.githubusercontent.com/sasoriza/c90a00e69fbd510fa2027b71839b4824/raw/00110a95fca3ba9a19941c5382e1e38a08b02872/magval.md – loeffel

0

non al 100% su come si sarebbe implementare, ma è possibile utilizzare Prototipi evento ascoltatore. Ho provato a collegare per la validazione dei form di Magento una volta prima al fine di fermare più l'invio di moduli, il codice era simile a ciò che è al di sotto, ma ho cambiato un po 'per adattarsi con le vostre esigenze:

new Event.observe('contactForm', 'keyup', function(e){ 
    e.stop(); 

    if(contactForm.validator && !contactForm.validator.validate()) { 
     //do something here because it failed validation 
     return; 
    } 


}); 
2

In primo luogo, creare per il modulo.

<form action="<?php echo $this->getUrl('/some/route/thing');?>" id="theForm"> 
    <input type="text" name="foo" id="foo" /> 
</form> 

successivo, eseguire questo po 'di javascript per trasformare la vostra vecchia forma normale in VarienForm

<script type="text/javascript"> 
//<![CDATA[ 
    var theForm = new VarienForm('theForm', true); 
//]]> 
</script> 

Quindi, scrivere il vostro convalida come una funzione javascript utilizzando il metodo Validation.add. (La validazione è un globale utilizzato per memorizzare tutte le regole di convalida modulo)

<script type="text/javascript"> 
//<![CDATA[ 
    var theForm = new VarienForm('theForm', true); 
    Validation.add('validate-must-be-baz','You failed to enter baz!',function(the_field_value){ 
     if(the_field_value == 'baz') 
     { 
      return true; 
     } 
     return false; 
    }); 

//]]> 
</script> 

Per maggiori informazioni segui questo link.

1

non aggiungendo nulla di nuovo qui, ma se si vuole tagliare e incollare un modo rapido per creare più convalide per il modulo, basta aggiungere alla fields matrice:

var fields = ['firstname', 'lastname', 'telephone', 'street1', 'region_id', 'country_id', 'city', 'postcode']; 

fields.map(function (fld) { 
    $('billing:' + fld).observe('change', function(e){ 
     Validation.validate($('billing:' + fld)) 
    }); 
}); 
Problemi correlati