Sollte jQuery $ (Formular) .submit (); nicht auslösen onSubmit Tag in Form?
Frage
Ich habe folgende Möglichkeiten:
<script type="text/javascript">
function CancelFormButton(button) {
$(button.form).submit();
}
</script>
<form onsubmit="alert('here');">
<input type="button" value="Cancel" onClick="CancelFormButton(this);" />
</form>
Wenn ich auf die Schaltfläche „Abbrechen“, die onsubmit aus dem Formular-Tag wird nicht ausgelöst.
Diese Linie trägt stattdessen das Formular erfolgreich: $(button.form).submit();
aber überspringt die alert('here');
innerhalb des onsubmit im Formular-Tag
Ist das richtig oder mache ich etwas falsch?
Durch die Art und Weise, in diesem Fall möchte ich diese Funktionalität, aber ich frage mich nur, wenn ich in ein Problem in einem Browser ausgeführt werde, wo die onsubmit ausgelöst wird.
Lösung
Sorry, falsch verstanden Ihre Frage.
Nach Javascript - Erfassung onsubmit wenn form.submit () Aufruf:
Ich wurde kürzlich gefragt: „Warum nicht funktioniert das form.onsubmit Ereignis ausgelöst werden, wenn ich einreichen meine Form mit Hilfe von Javascript?“
Die Antwort: Aktuelle Browser nicht zu diesem Teil des HTML haften Spezifikation. Das Ereignis wird nur ausgelöst, wenn es von einem Benutzer aktiviert wird - und nicht ausgelöst, wenn sie aktiviert durch Code.
(Hervorhebung hinzugefügt).
Hinweis: „von einem Benutzer aktiviert“ Schlagen enthält auch Tasten einreichen (wahrscheinlich einschließlich Standardverhalten von der Enter-Taste einreichen, aber ich habe nicht versucht). Ebenso wenig, wie ich glaube, nicht wahr ausgelöst werden, wenn Sie (mit Code) klicken, um eine Submit-Button.
Andere Tipps
Das Arbeit um das Problem von @Cletus gefunden beheben.
function submitForm(form) {
//get the form element's document to create the input control with
//(this way will work across windows in IE8)
var button = form.ownerDocument.createElement('input');
//make sure it can't be seen/disrupts layout (even momentarily)
button.style.display = 'none';
//make it such that it will invoke submit if clicked
button.type = 'submit';
//append it and click it
form.appendChild(button).click();
//if it was prevented, make sure we don't get a build up of buttons
form.removeChild(button);
}
Wird auf allen modernen Browsern.
Wird über Tabs arbeiten / gelaicht Kind Fenster (ja, auch in IE <9).
Und ist in Vanille!
übergeben Sie sie doch einfach einen DOM Verweis auf ein Element Form und es wird sicher alle angeschlossenen Hörer, die onsubmit machen, und (wenn sie bis dahin nicht verhindert) schließlich das Formular aus.
Meine einfache Lösung:
$("form").children('input[type="submit"]').click();
Es ist für mich arbeiten.
Ich nehme an, es ist vernünftig, dieses Verhalten in einigen Fällen zu wollen, aber ich würde, dass Code argumentiert kein Formular Vorlage Auslösung soll (immer) das Standardverhalten sein. Angenommen, Sie möchten mit einem Formular Vorlage fangen
$("form").submit(function(e){
e.preventDefault();
});
und dann auf die Eingabe einige Prüfungen durchführen. Wenn Code-Handler einreichen auslösen könnten, könnten Sie nie schließen
$("form").submit()
in diesem Handler, weil es in einer Endlosschleife führen würde (das gleiche Handler würde genannt, die Vorlage zu verhindern, validieren, und erneut einreichen). Sie müssen in der Lage sein, um manuell eine Form innerhalb eines Handlers submit ohne die gleiche Behandlungsroutine ausgelöst wird.
Ich weiß, das die Frage nicht direkt beantwortet, aber es gibt viele andere Antworten auf dieser Seite darüber, wie diese Funktionalität gehackt wird, und ich spürte, dass dies darauf hingewiesen werden muß (und es ist zu lang für einen Kommentar ).
Trigger ( 'Senden') ist Methode nicht work.because onSubmit nicht gefeuert werden. der folgende Code funktioniert für mich, rufen onSubmit Methode, wenn Sie diesen Code verwenden:
$("form").find(':submit').click();
Versuchen auslösen () Ereignis in Ihrer Funktion:
$("form").trigger('submit'); // and then... do submit()
Anstelle von
$("form").submit()
try this
$("<input type='submit' id='btn_tmpSubmit'/>").css('display','none').appendTo('form');
$("#btn_tmpSubmit").click();
Ich fand diese Frage vor Serval Jahren.
vor kurzem habe ich versucht, „zu umschreiben“, um das Verfahren einzureichen. unter meinem Code
window.onload= function (){
for(var i= 0;i<document.forms.length;i++){
(function (p){
var form= document.forms[i];
var originFn= form.submit;
form.submit=function (){
//do something you like
alert("submitting "+form.id+" using submit method !");
originFn();
}
form.onsubmit= function (){
alert("submitting "+form.id+" with onsubmit event !");
}
})(i);
}
}
<form method="get" action="" id="form1">
<input type="submit" value="提交form1" />
<input type="button" name="" id="" value="button模拟提交1" onclick="document.forms[0].submit();" /></form>
Es hat in IE, aber in anderen Browsern aus dem gleichen Grunde wie "cletus" failed
Die einfachste Lösung, dies zu umgehen ist ‚vorübergehend‘ Eingang mit Typ einreichen und Trigger-Klick zu erstellen:
var submitInput = $("<input type='submit' />");
$("#aspnetForm").append(submitInput);
submitInput.trigger("click");