Jak anulować wysłanie formularza w przycisku submit onclick event?

Pracuję nad ASP.net aplikacja internetowa.

Mam formularz z przyciskiem submit. Kod przycisku submit wygląda następująco: <input type='submit' value='submit request' onclick='btnClick();'>.

Chcę napisać coś takiego:

function btnClick() {
    if (!validData())
        cancelFormSubmission();
}
Jak mam to zrobić?
Author: Vivian River, 2010-11-19

14 answers

Lepiej Ci będzie...

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

Jeśli isValidForm() zwróci false, twój formularz nie zostanie przesłany.

Prawdopodobnie powinieneś również przenieść obsługę zdarzenia z wbudowanej linii.

document.getElementById('my-form').onsubmit = function() {
    return isValidForm();
};
 185
Author: alex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-25 05:47:10

Zmień swoje wejście na to:

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

I zwraca false w funkcji

function btnClick() {
    if (!validData())
        return false;
}
 43
Author: mikefrey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-19 16:28:08

Musisz zmienić

onclick='btnClick();'

Do

onclick='return btnClick();'

I

cancelFormSubmission();

Do

return false;

To powiedziawszy, starałbym się unikać wewnętrznych atrybutów zdarzeń na rzecz dyskretnego JS z biblioteką (taką jak YUI lub jQuery), która ma dobre API obsługi zdarzeń i powiązać ze zdarzeniem, które naprawdę ma znaczenie (tj. Zdarzenie submit formularza zamiast zdarzenia kliknięcia przycisku).

 14
Author: Quentin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-19 16:27:36

Czasami onsubmit nie działa z asp.net.

Rozwiązałem to w bardzo prosty sposób.

Jeśli mamy taką formę

<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>

Możesz teraz złapać get that event przed postback formularza i zatrzymać go z postback i zrobić wszystko ajax chcesz za pomocą tego jquery.

$(document).ready(function () {
            $("#login-btn").click(function (event) {
                event.preventDefault();
                alert("do what ever you want");
            });
 });
 7
Author: Shady Mohamed Sherif,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-09 12:39:59

Należy zmienić typ z submit na button:

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

Zamiast

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

Następnie otrzymujesz nazwę swojego przycisku w javascript i przypisujesz do niego dowolną akcję

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

Mam nadzieję, że to pomoże.

 5
Author: Mohammed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-05 16:37:00

Musisz return false;:

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

function btnClick() {
    return validData();
}
 4
Author: SLaks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-19 16:29:23

To bardzo stary wątek, ale na pewno zostanie zauważony. Stąd należy zauważyć, że oferowane rozwiązania nie są już aktualne, a nowoczesny Javascript jest znacznie lepszy.

<script>
document.getElementById(id of the form).addEventListener(
    "submit",
    function(event)
    {
        if(validData() === false)
        {
            event.preventDefault();
        }
    },
    false
);

Formularz otrzymuje obsługę zdarzeń, która monitoruje przesyłanie. Jeśli wywołana tam Funkcja validData (nie pokazana tutaj) zwróci FALSE, wywołanie metody PreventDefault, która wstrzymuje wysyłanie formularza i przeglądarka wraca do wejścia. W przeciwnym razie formularz zostanie wysłany jako to co zwykle.

P. S. działa to również z atrybutem onsubmit . Następnie funkcja anonymus function (event){...} musi w atrybucieonsubmit formularza. To nie jest tak naprawdę nowoczesne i możesz pracować tylko z jednym opiekunem zdarzenia dla submit. Ale nie musisz tworzyć dodatkowego javascript. Ponadto może być określony bezpośrednio w kodzie źródłowym jako atrybut formularza i nie ma potrzeby czekać, aż formularz zostanie zintegrowany z DOM.

 2
Author: Kira-Bianca,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-26 22:20:05

Dlaczego nie zmienić przycisku submit na zwykły przycisk, a na wydarzeniu click Prześlij formularz, jeśli przejdzie testy walidacyjne?

E. g

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

function btnClick() { 
    if (validData()) 
        document.myform.submit();
} 
 1
Author: George Johnston,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-19 16:28:20

Potrzebujesz onSubmit. Nie onClick w przeciwnym razie ktoś może po prostu nacisnąć enter, a to ominie Twoją walidację. Co do odwołania. musisz zwrócić false. Oto kod:

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

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

Edit onsubmit należy do tagu formularza.

 1
Author: Cfreak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-19 16:34:58

To proste, po prostu return false;

Poniższy kod znajduje się w onclick przycisku Wyślij za pomocą jquery..

if(conditionsNotmet)
{
return false;
}
 1
Author: omar-ali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-31 09:30:46

Użyj onclick='return btnClick();'

I

function btnClick() {
    return validData();
}
 0
Author: Adam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-19 16:27:14
function btnClick() {
    return validData();
}
 0
Author: mbeckish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-19 16:27:22
<input type='button' onclick='buttonClick()' />

<script>
function buttonClick(){
    //Validate Here
    document.getElementsByTagName('form')[0].submit();
}
</script>
 0
Author: Person,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-14 19:18:55

Z JQuery jest jeszcze prostsze: działa w Asp.Net MVC i Asp.Core

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

        if (ValidData) {
            return true;   //submit the form
        }
        else {
            return false;  //cancel the submit
        }
    });
</script>
 0
Author: Tidoy007,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-28 17:24:38