Come si annulla l'invio del modulo nell'evento su clic del pulsante di invio?


99

Sto lavorando su un'applicazione web ASP.net.

Ho un modulo con un pulsante di invio. Il codice per il pulsante di invio ha il seguente aspetto <input type='submit' value='submit request' onclick='btnClick();'>.

Voglio scrivere qualcosa come il seguente:

function btnClick() {
    if (!validData())
        cancelFormSubmission();
}

Come faccio a fare questo?


ahi, mi fa male la testa. Ho diversi submitinput diversi . Penso che proverò a utilizzare i controlli lato server in questa pagina.
Vivian River

2
possibile duplicato di Come impedire l'invio del modulo?
TJ

Risposte:


183

Stai meglio facendo ...

<form onsubmit="return isValidForm()" />

In caso di isValidForm()reso false, il modulo non viene inviato.

Probabilmente dovresti anche spostare il tuo gestore di eventi da inline.

document.getElementById('my-form').onsubmit = function() {
    return isValidForm();
};

Bello, ma sembra che non riesco onsubmita lavorare ogni volta che uso ASP.net perché asp.net racchiude TUTTO nella sua forma ...
Vivian River

5
Puoi usare il suo secondo suggerimento. Il javascript in linea è comunque il diavolo.
Stephen

3
Se stai utilizzando moduli Web ASP.NET (suggerimento: non farlo), non provare a includere altri moduli. Sono semplicemente incompatibili. Ho sentito che ASP.NET MVC ti consente di creare app Web utilizzando markup idiomatico.
Quentin

@David, se l'utilizzo di altri moduli non è compatibile con i moduli Web ASP.net, devo utilizzare solo i controlli lato server?
Vivian River

2
Qualcun altro ha risposto ESATTAMENTE come te stackoverflow.com/a/23604664/1639385 . Penso che sia stata una coincidenza troppo.
Ulisse Alves

43

Cambia il tuo input in questo:

<input type='submit' value='submit request' onclick='return btnClick();'>

E restituisci false nella tua funzione

function btnClick() {
    if (!validData())
        return false;
}

13

Devi cambiare

onclick='btnClick();'

per

onclick='return btnClick();'

e

cancelFormSubmission();

per

return false;

Detto questo, proverei a evitare gli attributi intrinseci dell'evento a favore di JS non invadente con una libreria (come YUI o jQuery) che ha una buona API di gestione degli eventi e si collega all'evento che conta davvero (cioè l'evento di invio del modulo invece dell'evento clic del pulsante).


2
L'utilizzo di onclick consentirà all'utente di premere invio e ignorare il controllo.
Cfreak

7

A volte onsubmitnon funzionerebbe con asp.net.

L'ho risolto in modo molto semplice.

se abbiamo una tale forma

<form method="post" name="setting-form" >
   <input type="text" id="UserName" name="UserName" value="" 
      placeholder="user name" >
   <input type="password" id="Password" name="password" value="" placeholder="password" >
   <div id="remember" class="checkbox">
    <label>remember me</label>
    <asp:CheckBox ID="RememberMe" runat="server" />
   </div>
   <input type="submit" value="login" id="login-btn"/>
</form>

Ora puoi catturare l'evento prima del postback del modulo e fermarlo dal postback e fare tutto l'ajax che vuoi usando questo jquery.

$(document).ready(function () {
            $("#login-btn").click(function (event) {
                event.preventDefault();
                alert("do what ever you want");
            });
 });

5

dovresti cambiare il tipo da submita button:

<input type='button' value='submit request'>

invece di

<input type='submit' value='submit request'>

quindi ottieni il nome del tuo pulsante in javascript e associ l'azione che desideri ad esso

var btn = document.forms["frm_name"].elements["btn_name"];
btn.onclick = function(){...};

ha funzionato per me spero che aiuti.


4

Devi return false;:

<input type='submit' value='submit request' onclick='return btnClick();' />

function btnClick() {
    return validData();
}

1

Perché non modificare il pulsante di invio in un pulsante normale e, all'evento clic, inviare il modulo se supera i test di convalida?

per esempio

<input type='button' value='submit request' onclick='btnClick();'>

function btnClick() { 
    if (validData()) 
        document.myform.submit();
} 

1
Premendo invio si ignorerà il controllo. Usa suSubmit
Cfreak

Quindi non funzionerà affatto se JavaScript non è disponibile. <a href=" icant.co.uk/articles/pragmatic-progressive-enhancement/… sulle cose che funzionano</a>.
Quentin

1

Hai bisogno onSubmit. Non onClickaltrimenti qualcuno può semplicemente premere invio e ignorerà la tua convalida. Per quanto riguarda la cancellazione. devi restituire false. Ecco il codice:

<form onSubmit="return btnClick()">
<input type='submit' value='submit request'>

function btnClick() {
    if (!validData()) return false;
}

Modifica onSubmit appartiene al tag del modulo.


questo non funzionerà. se i dati sono validi non restituisci true. mettere return true; alla fine della funzione btnClick ()
NickSoft

1

È semplice, basta restituire false;

Il codice seguente va all'interno del clic del pulsante di invio utilizzando jquery ..

if(conditionsNotmet)
{
return false;
}

0

uso onclick='return btnClick();'

e

function btnClick() {
    return validData();
}

2
premendo Invio si ignorerà il controllo. Usa suSubmit
Cfreak

0
function btnClick() {
    return validData();
}

1
È necessario fare di più per farlo funzionare. Ho provato a fare in modo che il functino restituisca vero o falso e non sembra fare alcuna differenza.
Vivian River

1
La sua risposta è corretta. Votato. Devi restituirlo anche nel tag di input
Cfreak

1
Inoltre, preferisco utilizzare ev.preventDefault()o ev.returnValue = falseper annullare il comportamento predefinito ma non impedire il bubbling di eventi, nel caso in cui altri controlli osservino lo stesso evento sullo stesso elemento. Utilizzare return falsesolo quando si desidera interrompere il bubbling dell'evento e annullare l'azione predefinita. Vedi questo articolo .
Klemen Slavič

Dover restituirlo nel gestore di eventi stesso è l'informazione più importante che mancava dalla risposta. Senza questo, la risposta è incompleta e non aiuta abbastanza per valere un voto positivo.
Quentin

0
<input type='button' onclick='buttonClick()' />

<script>
function buttonClick(){
    //Validate Here
    document.getElementsByTagName('form')[0].submit();
}
</script>

2
Per una risposta utile questa reazione deve essere estesa. Spiega perché questa è una risposta alla domanda.
Jeroen Heier

0

Con JQuery è ancora più semplice: funziona in Asp.Net MVC e Asp.Core

<script>
    $('#btnSubmit').on('click', function () {

        if (ValidData) {
            return true;   //submit the form
        }
        else {
            return false;  //cancel the submit
        }
    });
</script>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.