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.

War es hilfreich?

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");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top