onsubmit multiple funzioni javascript

Qualcuno sa come inviare più funzioni? Quello che intendevo fare era: onsubmit controlla se tutte queste funzioni restituiscono true, se tutte restituiscono true, quindi faccio l’action = “checked.html”

Tuttavia, ciò che effettivamente è successo è che il computer controlla il codice da sinistra a destra, e il risultato della funzione successiva sostituirà il precedente e così via fino alla fine. Quindi, anche se tutte e 3 le prime funzioni restituiscono false, finché l’ultima è vera, il computer eseguirà action = “checked.html”, che non è quello che ho inteso fare … qualcuno può aiutarmi per favore su questo, è stato come 4 ore Sto cercando di risolvere il problema: S Grazie!

Inoltre, quando ho provato a fare qualcosa come

, non funziona, tutto ciò che serve è verificare verify1 (), e non i seguenti …: (

CLARIFCATION: al momento dell’invio, desidero richiamare quattro funzioni di convalida. Inviare dovrebbe essere impedito a meno che tutte e quattro le funzioni non restituiscano true, ma tutte e quattro dovrebbero essere sempre chiamate anche se alcune di esse restituiscono false.

    Usa & invece di && .

    && usa la valutazione di cortocircuito e quindi non valuta l’operando di destra se l’operando di sinistra è falsa.

    & valuta sempre entrambi gli operandi.

     onsubmit="return !!(validateName() & validatePhone() & validateAddress() & validateEmail());" 

    EDIT: Scusa, ho dimenticato che non restituirò un booleano reale. Avvolgi l’espressione tra parentesi e usa un doppio ! per convertirlo come (ora) mostrato. (Non è necessario preoccuparsi se si utilizza il risultato in un test if , ma il valore restituito dal gestore eventi deve essere un booleano effettivo.)

    PS: Ecco una demo piuttosto goffa per mostrare che tutte e quattro le funzioni vengono chiamate ma producono il risultato complessivo vero o falso di cui hai bisogno: http://jsfiddle.net/nnnnn/svM4h/1/

    Cambia il tuo codice per utilizzare AND anziché OR

    onsubmit = “return validateName () && validatePhone () && validateAddress () && validateEmail ()”

    Il motivo è che se si utilizza OR una volta che la prima funzione restituisce true javascript non si preoccuperà di controllare le altre funzioni. Inoltre, non si desidera utilizzare OR perché se il primo controllo è falso e il secondo è vero, il modulo verrà comunque inviato poiché almeno uno dei tuoi assegni è VERO.

    Vedi fiddle per mostrare questo funziona, entrambi i controlli eseguono e mostrano un messaggio di avviso, ma poiché check2 restituisce false il modulo non invia – se vuoi giocare con i risultati di ritorno delle funzioni checks1 e check2 e l’uso di && e ||

    Dopo aver compreso meglio il problema, devi utilizzare un singolo &, ma poiché i risultati true & true 1 e non è true devi scriverlo in questo modo

    onsubmit = “return ((validateName () & validatePhone () & validateAddress () & validateEmail ()) == 1)”

    se tutto ciò che serve è assicurarsi che tutte le funzioni restituiscano true prima di procedere, quindi usare && non || e per assicurare che l’espressione non venga valutata pre-maturalmente dalla funzione di ritorno, inserire delle parentesi aggiuntive

      

    Crea una funzione wrapper, che chiama ogni funzione e controlla il loro valore di ritorno. In qualsiasi momento, se il valore restituito è falso, puoi interrompere il modulo submit restituendo false in quel momento o valutare il resto delle cose e infine restituire false.

    Quindi JS un codice che farà ciò che vuoi è:

     function validateForm() { var isFormValid = true; isFormValid &= validateName(); isFormValid &= validatePhone(); isFormValid &= validateAddress(); isFormValid &= validateEmail(); return isFormValid? true:false; } 

    Ora nella forma usa semplicemente:

     

    Ecco un esempio di JSFiddle funzionante.

    EDIT: fatto un boo boo qui sotto, corretto.

    L’uso di OR non era corretto, ma la ragione per cui AND non sta funzionando come ti aspetti è a causa di Short-circuit_evaluation .

  • OPPURE: la valutazione si interrompe sul primo operando, che è true e true viene restituito
  • AND: La valutazione si interrompe sul primo operando che è falso e viene restituito falso
  • onsubmit = “return validateName () && validatePhone () && validateAddress () && validateEmail ()”

    usa questo codice

    Per validare il mio modulo ho semplicemente creato una funzione chiamata validateForm () {}, quindi all’interno di questa funzione inserisco tutto il codice necessario per la piena convalida. Quindi usato onsubmit = “validateForm ()”. Lo controlla in ordine e si limita a presentarsi solo se tutte le condizioni sono vere.

    Seguendo il metodo, verifica la prima funzione validateName () e procederà a verificare la funzione successiva se solo la prima funzione è vera, anche per triggersre la terza funzione è necessario restituire true della prima e seconda funzione. Quindi immagina se tutte le funzioni non sono valide e anche se hai un messaggio di errore diverso, vedrai solo il messaggio di errore della prima funzione. Una volta superata la funzione validateName (), è ansible che venga visualizzato il messaggio di errore di validatePhone () ect.

     

    Non è ansible utilizzare sopra se si visualizzano messaggi di errore in base alle convalide di cui sopra al primo invio e si può utilizzare il seguente metodo se si desidera triggersre tutte le funzioni (o visualizzare tutti gli errori di convalida) su submit.