restituisce false non fermare l’invio del modulo

Il mio scopo: Se il campo utente e la password campi sono vuoti, voglio smettere di modulo di presentazione.
Questo è il mio Codice che sto cercando:

<!DOCTYPE html>
<html>
<head>
    <script>
        function doit() {

            var usr = document.getElementById('ur').value;
            var psw = document.getElementById('pw').value;

            if ((usr.trim() == '') && (psw.trim() == '')) {
                alert("cannot Submit form");
                return false;
            }

        }
    </script>

</head>


<body>

    <form action="post.php" method="post" onsubmit="doit()">
        User:
        <input type="text" id="ur" name="user">
        <br>
        <br> Pass:
        <input type="password" id="pw" name="pass">
        <br>
        <br>
        <button>Submit</button>
    </form>


</body>
</html>

Sto imparando JavaScript. Sarà utile se è corretto il codice con un po ‘ di spiegazione perché non funziona.

  • aggiungere required attributo agli ingressi, in tutti i browser moderni, l’effetto sarà lo stesso. E nella funzione e vorrei utilizzare O operatore, non E entrambi i valori non deve essere vuota.
InformationsquelleAutor Asif Iqbal | 2015-04-23

 

3 Replies
  1. 53

    return false sta lavorando bene, il modo in cui si sono chiamata che la funzione è sbagliato.

    <form action="post.php" method="post" onsubmit="doit()"> 

    Solo la chiama, non fare nulla con il valore di ritorno

    <form action="post.php" method="post" onsubmit="return doit()"> 
                                                    ^

    Fermerà il modulo di post su un falso valore restituito.

    Di leggere questa nota sul MSDN anche se non è IE specifiche

    È possibile eseguire l’override di questo evento restituendo false in caso di gestore. Utilizzare questa funzionalità per convalidare i dati sul lato client per evitare che dati non viene inviato al server. Se il gestore di eventi è chiamato da onsubmit attributo dell’oggetto form, il codice necessario richiedere esplicitamente il valore di ritorno utilizzando la funzione di ritorno, e il gestore di evento deve fornire un ritorno esplicito valore per ogni possibile percorso di codice nella funzione di gestore di eventi.

    Ora su un altro punto importante.

    Tuo if condizione solo interrompere l’invio del modulo quando entrambi i campi sono vuoti, mentre dovrebbe farlo anche se uno di questi due campi è vuoto. Che && (E), deve essere un || (O), e alla fine delle vostre funzioni, se non restituito false, return true poi.

    • Per quanto riguarda il > il gestore di evento deve fornire un ritorno esplicito valore per ogni possibile percorso di codice nella funzione di gestore di eventi — non dimenticate di aggiungere un return true; (o qualcos’altro) al fine di doit()!
    • l’aggiunta di return true alla fine non è necessario, anche se sarebbe bello in quanto si evita di ottenere un “non tutti i percorsi di restituire un valore” attenzione in alcuni editori e lanugine pedine. Ma il codice non funzionerà correttamente senza di essa. Se si cade fuori la fine della funzione, senza un return, la funzione restituisce undefined, che non ha lo stesso valore come false. Si consideri il caso di un gestore di eventi che non restituisce mai true o false o di qualsiasi valore di tutti – una funzione di consentire il modulo per essere presentato. Devi esplicitamente return false per prevenire la trasmissione.
    • Prendendo il brano citato letteralmente, se il gestore di deve fornire un esplicito valore di ritorno, allora non sarebbe giusto fare affidamento sul implicita undefined. In pratica, quello che dici funzionerà su tutti i browser corrente, al meglio della mia conoscenza, e potrebbe anche essere più corretto secondo HTML/ECMAScript specifiche (non ho tempo di controllare), ma se dovessimo prendere l’articolo di MSDN alla sua parola, allora il ritorno esplicito valore è obbligatorio. (Anche se, essendo questo MSDN e IE-concentrato, potrebbe essere proprio la copertura VBS per tutti, lo so…)
    • Che solo sciatta formulazione l’articolo di MSDN. L’ultima parte, “…e il gestore di evento deve fornire un ritorno esplicito valore per ogni possibile percorso di codice nella funzione di gestore di eventi”, è semplicemente sbagliato. Ogni ritorno da ogni funzione fornisce sempre un esplicito valore di ritorno se si utilizza un return istruzione o no. Se si cade fuori la fine di una funzione senza return, allora la funzione restituisce undefined. Se l’articolo di MSDN erano corrette, si potrebbe soddisfare le sue esigenze con un esplicito return undefined alla fine della funzione, ma che la stessa non return.
    • ohh uomo impressionante.. thankx è wokred.. 🙂
  2. 9

    onsubmit evento accetta valori booleani, perché non restituire nulla in modo che si presuppone true per impostazione predefinita. È necessario aggiungere il ritorno in questo evento.

    cambiare

    onsubmit="doit()"> 

    per

    onsubmit="return doit()"> 
  3. 2

    Utilizzando il metodo addEventListener su invia con il metodo preventDefault()

    JS:

        document.form1.addEventListener("submit", function(event) {
    
          var usr = document.getElementById('ur').value;
          var psw = document.getElementById('pw').value;
    
          if ((usr.trim() == '') || (psw.trim() == '')) {
            alert("cannot Submit form");
            event.preventDefault();
          } else {
            alert("submit");
          }
    
        });

    HTML:

      <form action="" method="post" name="form1">
        User: <input type="text" id="ur" name="user"><br><br> 
        Pass: <input type="password" id="pw" name="pass"><br><br>
        <input type="submit" value="Submit" />
      </form>

Lascia un commento