Verhindern Sie das Aktualisieren der Seite, wenn Sie auf die Schaltfläche im Formular klicken

148

Ich habe ein Problem bei der Verwendung von Schaltflächen im Formular. Ich möchte, dass diese Taste die Funktion aufruft. Es tut es, aber mit unerwünschtem Ergebnis, dass es die Seite aktualisiert.

Mein einfacher Code geht so

<form method="POST">
    <button name="data" onclick="getData()">Click</button>
</form>

Beim Klicken auf die Schaltfläche wird die Funktion mit aktualisierter Seite aufgerufen, wodurch alle meine vorherigen Anforderungen zurückgesetzt werden, die sich auf die aktuelle Seite auswirken, die das Ergebnis der vorherigen Anforderung war.

Was kann ich tun, um die Seitenaktualisierung zu verhindern?

Bunkdeath
quelle
Sie müssen die Parameter angeben, wenn Sie einfach window.location = window.location.href verwenden; Es aktualisiert die gesamte Seite und setzt alle Ihre vorherigen Anforderungen zurück. Bitte überprüfen Sie dies: stackoverflow.com/questions/133925/…
linguini
@bunkdeath: Saugen Antwort sollte akzeptiert werden.
Jad Chahine
@JadChahine Entschuldigung, ich habe nicht bemerkt, dass ich die Antwort nicht akzeptiert habe, danke für den Hinweis. Ich war ein Anfänger und wusste nicht, was ich damals tat oder nicht tat. Aber ich werde die Antwort, die Sie erwähnt haben, nicht akzeptieren, sondern die, die mir damals geholfen hat :)
Bunkdeath

Antworten:

67

Lassen Sie getData()false zurückgeben. Dies wird es beheben.

<form method="POST">
    <button name="data" onclick="return getData()">Click</button>
</form>
JNDPNT
quelle
1
Tatsächlich. Die onclickFunktion muss false zurückgeben, nicht getData.
Quentin
1
Das ist es, was ich erwähne, aber okay, ich habe die Antwort so geändert, dass sie klarer ist.
JNDPNT
5
Sie müssen die Funktion nicht ändern - Sie können einfach onclick = "getData (); return false;"
2
type="button"ist wirklich der Haken.
Deepcell
338

In type="button"der Schaltfläche.

<button name="data" type="button" onclick="getData()">Click</button>

Der Standardwert typefür eine Schaltfläche ist submit, der das Formular in Ihrem Fall selbst veröffentlicht und es wie eine Aktualisierung aussehen lässt.

detale
quelle
8
perfekte Antwort hier gegeben
Timberlake
2
Dies verhindert jedoch die Validierung des HTML5-Formulars (z. B. für die Eingabe von type = "email").
2540625
2
Sie können auch return false;zum onclick hinzufügen :onclick="getData(); return false;"
JBaczuk
1
Dies ist die beste Option. Während "return false" möglicherweise inline funktioniert, gibt es beim Hinzufügen von Ereignis-Listenern keine mir bekannte Option. Die Angabe von type = "button" spart wirklich den Tag.
Für immer Noob
1
Dies ist eigentlich die "offizielle" Lösung für diese Art von Problem. Die Rückgabe von false KANN auch funktionieren, aber die Typschaltfläche wird niemals fehlschlagen.
student0495
18

Alles, was Sie tun müssen, ist ein Typ-Tag zu setzen und die Typ-Schaltfläche zu erstellen.

<button id="btnId" type="button">Hide/Show</button>

Das löst das Problem

user8564339
quelle
2
Können Sie erklären und erklären, warum?
mjk
Das Standardverhalten einer Schaltfläche ist vom Typ "
Senden"
16

Das Problem ist, dass es die Formularübermittlung auslöst. Wenn Sie die getDataFunktion return falseausführen, sollte das Senden des Formulars verhindert werden.

Alternativ können Sie auch die preventDefaultMethode des Ereignisobjekts verwenden:

function getData(e) {
    e.preventDefault();
}
James Allardice
quelle
Das Klickereignis, das übergeben wird.
JNDPNT
Außer dass (ohne weitere Änderungen) das Ereignisobjekt nicht übergeben wird.
Quentin
<button name = "data" onclick = "getData ($ event)"> Klicken Sie auf </ button>
RoboMex
9

HTML

<form onsubmit="return false;" id="myForm">
</form>

jQuery

$('#myForm').submit(function() {
    doSomething();
});
Mehdiway
quelle
$ ('. myForm) sollte $ (' # myForm) sein
Mutant
3
<form method="POST">
    <button name="data" onclick="getData()">Click</button>
</form>

Verwenden Sie anstelle des Schaltflächen-Tags das Eingabe-Tag. So was,

<form method="POST">
    <input type = "button" name="data" onclick="getData()" value="Click">
</form>
Manik Sood
quelle
Aber dies hat keine Schaltfläche abbutton type='button'
Pardeep Jain
3

Wenn Ihre Schaltfläche die Standardeinstellung "Schaltfläche" ist, stellen Sie sicher, dass Sie das Typattribut explizit festlegen. Andernfalls wird es von WebForm standardmäßig als "Senden" behandelt.

Wenn Sie js verwenden, tun Sie dies

<form method="POST">
   <button name="data"  type="button" id="btnData" onclick="getData()">Click</button>
</form> 

**If you use jquery use like this**


<form method="POST">
   <button name="data"  type="button" id="btnData">Click</button>
</form>




$('#btnData').click(function(e){
   e.preventDefault();
   // Code goes here
getData(); // your onclick function call here

});
Thusitha Deepal
quelle
2

Eine Javascript-Methode zum Deaktivieren der Schaltfläche selbst

document.getElementById("ID NAME").disabled = true;

Sobald alle Formularfelder Ihre Kriterien erfüllt haben, können Sie die Schaltfläche wieder aktivieren

Die Verwendung einer JQuery wird ungefähr so ​​sein

$( "#ID NAME" ).prop( "disabled", true);
repzero
quelle
0

Aus irgendeinem Grund wird in Firefox, obwohl ich return false;und myform.preventDefault();in der Funktion habe, die Seite aktualisiert, nachdem die Funktion ausgeführt wurde. Und ich weiß nicht, ob dies eine gute Praxis ist, aber es funktioniert für mich, ich füge javascript:this.preventDefault();in das Aktionsattribut ein.

Wie gesagt, ich habe alle anderen Vorschläge ausprobiert und sie funktionieren in allen Browsern, aber Firefox. Wenn Sie das gleiche Problem haben, versuchen Sie, das Ereignis "Verhindern" entweder javascript:return false;oder im Aktionsattribut hinzuzufügen javascript:this.preventDefault();. Versuchen Sie nicht, mit javascript:void(0);welcher Ihr Code brechen wird. Frag mich nicht warum :-).

Ich denke nicht, dass dies eine elegante Art ist, aber in meinem Fall hatte ich keine andere Wahl.

Aktualisieren:

Wenn Sie nach der Verarbeitung von Ajax einen Fehler erhalten haben, entfernen Sie die Attributaktion und führen Sie im onsubmitAttribut Ihre Funktion aus, gefolgt von der falschen Rückgabe:

onsubmit="functionToRun(); return false;"

Ich weiß nicht, warum all diese Probleme mit Firefox, aber ich hoffe, das funktioniert.

Raphie
quelle
0

Die Rückgabefunktion funktioniert nicht in allen Fällen. Ich habe es versucht:

<button id="Reset" class="Button-class" onclick="return Reset()">Show result</button>

Es hat bei mir nicht funktioniert.

Ich habe versucht, innerhalb der Funktion false zurückzugeben, und es hat bei mir funktioniert.

function Reset()
{
    .
    .
    .
    return false;
}
Harsha Vardhini
quelle
0

Ich hatte das gleiche Problem. Das Problem liegt in der onclickFunktion. Es sollte kein Problem mit der Funktion geben getData. Es funktionierte, indem die onclickFunktion false zurückgab.

<form method="POST">
    <button name="data" onclick="getData(); return false">Click</button>
</form>
Tasnim Fabiha
quelle
0

Dieser ist die beste Lösung:

<form  method="post"> 
    <button  type="button" name="data" onclick="getData()">Click Me</button>
</form>

Hinweis: Mein Code ist sehr einfach.

HAPPY SINGH
quelle
-2

Sie können Ajax und JQuery verwenden, um dieses Problem zu lösen:

<script>
    function getData() {
        $.ajax({
            url : "/urlpattern",
            type : "post",
            success : function(data) {
                alert("success");
            } 
        });
    }
</script>
<form method="POST">
    <button name="data" type="button" onclick="getData()">Click</button>
</form>
Rasmi Ranjan Pradhan
quelle
Diese Antwort ist zu kompliziert, geschweige denn, dass eine externe Bibliothek erforderlich ist, um das Problem des OP zu vermeiden, bei dem andere, einfachere Methoden verwendet werden können.
Zac