Javascript überschreiben form onsubmit-Ereignis funktioniert nicht
Ich bin überschreiben einer form submit event wie diesem:
form.onsubmit = function(event) {
event.preventDefault();
Aber wenn ich Anrufe, reichen auf die form, wie dies in einer separaten Funktion:
form.submit();
Den onsubmit-Funktion nicht aufgerufen und das Formular gepostet wird, wie üblich.
Irgendwelche Gedanken?
Edit:
Bin ich auch eine Datei erstellen Eingabe in dieses Formular zu und ruft seinen click-Ereignis sofort. Würde dies Auswirkungen auf die form-submit-Ereignis?:
if (fileInput && document.createEvent)
{
var evt = document.createEvent('MouseEvents');
evt.initEvent('click', true, false);
fileInput.dispatchEvent(evt);
}
Edit #2:
Ich bin dem Absenden des Formulars durch den Aufruf des Formular-submit-Funktion nach der Datei ein Wert geändert hat:
function nameFileLabel(id)
{
var f = document.getElementById('fileForm' + id);
var l = document.getElementById("fileText_" + id);
var i = document.getElementById("fInputId" + id);
if (i.value != '')
{
l.innerHTML = i.value.replace('fakepath', '...');
var theUploadForm = document.getElementById('fileDiv_' + id);
theUploadForm.style.visibility = 'visible';
theUploadForm.style.display = 'block';
f.submit();
}
}
Sie können auch versuchen onClick="Funktionsname" in Ihren html-Formular-tag.
was kann ich jetzt sehen, in den bearbeiteten code, den Sie veröffentlichen Sie Ihre form mit Hilfe von javascript. Und damit das "onsubmit" ist nicht immer genannt. Grund ist einfach, dass der browser denkt, dass Sie die übermittlung Ihrer form durch den code, so dass Sie bereits getan haben, die Vorverarbeitung, bevor Sie den Aufruf der submit-Methode. Also, IMO, bevor Sie rufen Sie die f.submit () - Anweisung, rufen Sie alle anderen Methoden, die Sie durchführen möchten, bevor das Formular an.
Manish, siehe meine Lösung unten. Sie waren auf der richtigen Spur. Vielen Dank für Ihre Hilfe. 🙂
was kann ich jetzt sehen, in den bearbeiteten code, den Sie veröffentlichen Sie Ihre form mit Hilfe von javascript. Und damit das "onsubmit" ist nicht immer genannt. Grund ist einfach, dass der browser denkt, dass Sie die übermittlung Ihrer form durch den code, so dass Sie bereits getan haben, die Vorverarbeitung, bevor Sie den Aufruf der submit-Methode. Also, IMO, bevor Sie rufen Sie die f.submit () - Anweisung, rufen Sie alle anderen Methoden, die Sie durchführen möchten, bevor das Formular an.
Manish, siehe meine Lösung unten. Sie waren auf der richtigen Spur. Vielen Dank für Ihre Hilfe. 🙂
InformationsquelleAutor Xavi | 2015-04-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um zu verhindern, dass das Formular zur Veröffentlichung Ihrer Funktion muss den Wert false zurück.
Versuchen Sie das ersetzen-Formular."onsubmit" ... mit dem Dokument.getElementById('form1')."onsubmit"..., und fügen Sie eine id="form1", um Ihre form-tag in HTML.
garryP, ich denke nicht, dass das funktionieren würde, wie erstelle ich das Formular dynamisch in javascript-und es würde nicht in den DOM an der Stelle, ich bin das hinzufügen der onsubmit-Funktion.
Hinzufügen Sie können die Veranstaltung nach dem Formular Hinzugefügt wurde, um den DOM?
InformationsquelleAutor garryp
Versuchen mit diesem einen
Ich änderte den Namen der Funktion.
Ich konnte nicht sehen, dass ändern. Es wäre besser gewesen, zu beachten, dass diese in Ihrem Kommentar, was Sie eigentlich geändert, dass Sie denken, löst das Problem. Aber .Einreichen ist keine Veranstaltung, an der form, wie beschrieben in w3schools.com/jsref/event_onsubmit.asp
Gut, wenn Sie sehen, die Frage, Xavi schrieb Formular."onsubmit" und ich mache die änderung als form.senden
Manish ich geändert, die Funktion zu senden, die hielt den posten, aber dann bekomme ich diesen Fehler: TypeError: Cannot read property 'preventDefault' undefined
InformationsquelleAutor Manish Rawat
Als Manish darauf hingewiesen, beide überschreiben die submit-Funktion und den Aufruf der submit form in javascript wurde erschwert, wie die Veranstaltung war verbreitend. So fügte einen verborgenen Knopf in der form, in javascript und rief die Schaltfläche click-Funktion anstelle des Formular-submit-Funktion. Das scheint geklappt zu haben auch wenn es es fühlt sich eher wie eine Behelfslösung! Vielen Dank für an Euch alle für die prompte Hilfe. 🙂
InformationsquelleAutor Xavi
Folgenden auf @garryp Antwort auf "false " zurückgeben". Um add-on, das weitere Lesen von MDN event.stopImmediatePropagation, um zu sehen, Unterschiede und Verwendung von event.preventDefault und event.stopPropagation.
Auf der Seite beachten, "return false;" ist das gleiche Aufruf;
Hoffe, das hilft.
hmm, versuchen Sie es mit einem Haltepunkt auf browser-dev-tools, dh. firebug oder chrome. Ich werde auch versuchen " - Konsole.log('vorlegen');" + andere Variablen beobachten. Schließlich, verstehen das Konzept der Ereignisse und wie es sprudelt. Im Grunde, preventDefault() Stoppt die Standard-Aktion wird ausgelöst, stopPropagation werden es nicht zulassen, sprudelt bis der DOM, aber auch andere, innerhalb des Aufgabenbereichs wird, ausgelöst werden. Schließlich stopImmediatePropogation.. Stoppt es alle.
InformationsquelleAutor daxeh