Wenn die Formularmethode, die direkt mit JS angerufen wurde, nicht angerufen wird, antwortet das Submit -Ereignis nicht. Warum? Wenn Sie wissen, antworten Sie bitte. Für eine Analogie habe ich Input verwendet. Select (), um sie zu testen, konnte aber auf das ausgewählte Ereignis reagieren. Lassen Sie uns diesen Grund beiseite legen. Lassen Sie uns zuerst sehen, wie das aktuelle Problem gelöst werden kann.
Beispiel für Code, der nicht auf Ereignisse reagiert:
<Form ID = Form1 Action = http: //www.jb51com> </form>
<script type = text/javaScript>
var form = document.getElementById ('Form1');
Form.onsubmit = function () {
Alarm (1);
};
Form.Submit ();
</script>
Im tatsächlichen Betrieb wird kein Alarm herauskommen.
Obwohl die Verwendung der Submit -Methode zur Einreichung eines Formulars gegen das Prinzip des unauffälligen JavaScript verstößt, müssen Sie es manchmal verwenden. Nach der Auswahl der Element müssen Sie beispielsweise JS verwenden, um das Suchformular einzureichen.
2. ProblemanalyseDa das Ereignis selbst nicht reagiert, ist es nur möglich, diese Ereignisse manuell auszulösen. Lassen Sie uns die Registrierungsmethode des Ereignisses überprüfen:
Es gibt zwei ursprüngliche Registrierungsmethoden, siehe Code -Beispiel:
<form id = Form1 action = https: //www.vevb.com onsubmit = alert (1)> </form> <form id = form1 action = https: //www.vevb.com> </form>
<script type = text/javaScript>
document.getElementById ('Form1'). OnSubmit = function () {
Alarm (1);
}
</script>
Ein solches Registrierungsereignis fügt eine Methode zum Formular hinzu. Daher ist es möglich, diese Methode direkt auszuführen, die dem Ereignis manuell ausgelöst wird.
Siehe Codebeispiel:
<script type = text/javaScript>
Form.onsubmit ();
</script>
Dies gibt Ihnen eine Warnung.
Die fortschrittliche DOM2 -Standardregistrierungsmethode und die IE -Registrierungsmethode attungsgemäß werden jedoch bereits sehr häufig verwendet. Die ONSUBMIT -Methode existiert in diesen Registrierungsmethoden nicht. Wenn Form.onsubmit () verwendet wird, wird ein Fehler direkt gemeldet.
3. LösungNatürlich bietet die erweiterte Registrierungsmethode selbst auch eine Lösung, um Ereignisse manuell auszulösen. Sie müssen jedoch nur verschiedene Programme für den DOM2 -Standard und IE schreiben. Darüber hinaus ist dieses Programm auch für die ursprüngliche Registrierungsmethode wirksam. Bitte beachten Sie das Code -Beispiel:
<script type = text/javaScript>
// dh Fire Event
if (Form.FireEvent) {
Form.FireEvent ('OnSubmit');
Form.Submit ();
// DOM2 Fire Event
} else if (document.createEvent) {
var ev = document.createEvent ('htmlevents');
ev.initevent ('subine', false, wahr);
Form.DispatchEvent (ev);
}
</script>
4. Code ZusammenfassungIch werde die Details hier nicht mehr erklären. Freunde, die damit nicht vertraut sind, überprüfen Sie bitte die relevanten Informationen selbst. Lassen Sie uns den gesamten Code zusammenziehen:
<! DocType html public -// w3c // dtd html 4.01 // en http://www.w3.org/tr/html4/strict.dtd>
<html>
<kopf>
<meta http-äquiv = content-type content = text/html; charset = gbk>
<title> Senden </title>
<script type = text/javaScript src = http: //k.kbcdn.com/js/yui/build/utilities/utilities.js> </script>
</head>
<body>
<Form ID = Form1 Action = https: //www.vevb.com> </form>
<script type = text/javaScript>
var form = document.getElementById ('Form1');
// Yui Register Event
Yahoo.util.event.on ('Form1', 'subine', function () {
alarm ('yui');
});
// Dom0 Registerereignis
Form.onsubmit = function () {
Alarm (1);
};
// DOM2 Registerereignis
if (form.addeventListener) {
Form.AdDeVentListener ('Submit', function () {
Alarm (2);
}, FALSCH);
// IE Register Event
} else if (form.attachEvent) {
form.attachEvent ('OnSubmit', function () {
Alarm (2);
});
}
// dh Fire Event
if (Form.FireEvent) {
Form.FireEvent ('OnSubmit');
Form.Submit ();
// DOM2 Fire Event
} else if (document.createEvent) {
var ev = document.createEvent ('htmlevents');
ev.initevent ('subine', false, wahr);
Form.DispatchEvent (ev);
}
</script>
</body>
</html>
Es gibt ein kleines Problem mit dem gesamten Lauf. Unter FX, Form.Submit () ist nicht erforderlich. Ich habe das Formular direkt eingereicht, daher wird dieser Satz ebenfalls gespeichert. Bitte antworten Sie, wenn Sie den Grund kennen.
Diese Demo wurde unter IE6/IE7/FX getestet.