Wenn ich ein solches Formular habe,
<form action="/Car/Edit/17" id="myForm" method="post" name="myForm"> ... </form>
Wie kann ich es einreichen, ohne von JavaScript / jQuery zu einer anderen Ansicht umzuleiten?
Ich habe viele Antworten von Stack Overflow gelesen, aber alle leiten mich zu der Ansicht weiter, die von der POST-Funktion zurückgegeben wird.
javascript
jquery
html
forms
Herzog Nuke
quelle
quelle
Antworten:
Um das zu erreichen, was Sie wollen, müssen Sie jQuery Ajax wie folgt verwenden:
Versuchen Sie auch dieses:
Endgültige Lösung
Das hat einwandfrei funktioniert. Ich rufe diese Funktion von auf
Html.ActionLink(...)
quelle
@Html.ActionLink("Add a Report", "Create", "Reports", new { carId = Model.Id }, new { onclick = "FUNCTION_WHICH_SUBMITES_FORM()" })
function SubForm (){ alert("1"); //e.preventDefault(); $.ajax({ url:'/Car/Edit/@Model.Id/', type:'post', data:$('#myForm').serialize(), success:function(){ alert("fasf"); } }); }
Sie können dies erreichen, indem Sie die Formulare
action
auf ein unsichtbares umleiten<iframe>
. Es ist kein JavaScript oder eine andere Art von Skripten erforderlich.quelle
<input type='submit'...
zu<input type='reset'
und fügen Sie hinzuonclick='document.forms["myForm"].submit();'>
Platzieren Sie ein verstecktes
iFrame
am Ende Ihrer Seite undtarget
es in Ihrem Formular:Schnell und einfach. Beachten Sie, dass das
target
Attribut zwar weitgehend unterstützt wird (und in HTML5 unterstützt wird), in HTML 4.01 jedoch veraltet ist.Sie sollten Ajax also wirklich zukunftssicher verwenden.
quelle
target
vollständig gültig, sodass AJAX weiterhin optional ist.Da alle aktuellen Antworten jQuery oder Tricks mit iframe verwenden, kann das Hinzufügen einer Methode mit einfachem JavaScript nicht schaden:
quelle
Okay, ich werde dir keine magische Art sagen, es zu tun, weil es keine gibt. Wenn Sie ein Aktionsattribut für ein Formularelement festgelegt haben, wird es umgeleitet.
Wenn Sie nicht möchten, dass es umgeleitet wird, legen Sie einfach keine Aktion fest und legen Sie fest
onsubmit="someFunction();"
Wenn
someFunction()
Sie tun, was Sie wollen (mit oder ohne AJAX) und am Ende hinzufügenreturn false;
, fügen Sie hinzu , um den Browser anzuweisen, das Formular nicht zu senden ...quelle
Sie brauchen Ajax, um dies zu erreichen. Etwas wie das:
quelle
Einzeilige Lösung ab 2020, wenn Ihre Daten nicht als
multipart/form-data
oder gesendet werden sollenapplication/x-www-form-urlencoded
:quelle
action="..."
, wird der Seitenwechsel effektiv verhindert, aber auch, dass Daten über das Netzwerk gesendet werden.Siehe jQuerys
post
Funktion.Ich würde eine Schaltfläche erstellen und ein
onClickListener
($('#button').on('click', function(){});
) setzen und die Daten in der Funktion senden.Siehe auch die
preventDefault
Funktion von jQuery!quelle
Der gewünschte Effekt kann auch erzielt werden, indem Sie die Senden-Schaltfläche außerhalb des Formulars bewegen, wie hier beschrieben:
Verhindern Sie das erneute Laden und Umleiten von Seiten auf dem Formular. Senden Sie ajax / jquery
So was:
quelle
Mit diesem Snippet können Sie das Formular senden und eine Umleitung vermeiden. Stattdessen können Sie die Erfolgsfunktion als Argument übergeben und tun, was Sie wollen.
Und dann einfach:
quelle
Wenn Sie das Backend steuern, verwenden Sie etwas wie
response.redirect
anstelle vonresponse.send
.Sie können hierfür benutzerdefinierte HTML-Seiten erstellen oder einfach zu etwas umleiten, das Sie bereits haben.
In Express.js:
quelle