Lorsque la méthode du formulaire soumise directement en appelant JS, l'événement Soumettre ne répond pas. Pourquoi? Si vous savez, veuillez répondre. Pour une analogie, j'ai utilisé Input.Select () pour le tester, mais il a pu répondre à l'événement Select. Mettons cette raison de côté, voyons comment résoudre d'abord le problème actuel.
Exemple de code qui ne répond pas aux événements:
<form id = form1 action = http: //www.jb51com> </ form>
<script type = text / javascript>
var form = document.getElementById ('form1');
form.onsubmit = fonction () {
alerte (1);
};
form.submit ();
</cript>
En fonctionnement réel, aucune alerte ne sortira.
Bien que l'utilisation de la méthode de soumission pour soumettre un formulaire viole le principe du JavaScript discret, vous devez parfois l'utiliser. Par exemple, après avoir sélectionné un élément, vous devez utiliser JS pour soumettre le formulaire de recherche.
2. Analyse des problèmesÉtant donné que l'événement lui-même ne répond pas, il est seulement possible de déclencher ces événements manuellement. Avant de déterminer le plan de déclenchement manuel, passons en revue la méthode d'enregistrement de l'événement:
Il existe deux méthodes d'enregistrement originales, voir l'exemple de code:
<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 () {
alerte (1);
}
</cript>
Un tel événement d'enregistrement ajoutera une méthode OnSubmit à la forme. Par conséquent, il est possible d'exécuter directement cette méthode, ce qui équivaut à déclencher manuellement l'événement.
Voir l'exemple de code:
<script type = text / javascript>
form.onsubmit ();
</cript>
Cela vous donne une alerte.
Cependant, la méthode d'enregistrement standard Advanced DOM2 et la méthode d'enregistrement IE attach-sevent sont déjà très couramment utilisées. La méthode ONSUMMIT n'existe pas dans ces méthodes d'enregistrement. Si form.onsubmit () est utilisé, une erreur sera signalée directement.
3. SolutionBien sûr, la méthode d'enregistrement avancée elle-même fournit également une solution pour déclencher manuellement les événements, mais il n'a besoin que d'écrire différents programmes pour la norme DOM2 et IE. De plus, ce programme est également efficace pour la méthode d'enregistrement d'origine. Veuillez consulter l'exemple du code:
<script type = text / javascript>
// IE Fire Event
if (form.fireevent) {
form.fireevent ('onsubmit');
form.submit ();
// Événement de feu DOM2
} else if (document.createevent) {
var ev = document.createEvent ('htmlevents');
ev.initevent («soumettre», false, vrai);
form.dispatchEvent (ev);
}
</cript>
4. Résumé du codeJe n'expliquerai plus les détails ici. Des amis qui ne le connaissent pas, veuillez vérifier les informations pertinentes par vous-même. Setttons l'ensemble de l'ensemble du code:
<! Doctype html public - // w3c // dtd html 4.01 // en http://www.w3.org/tr/html4/strict.dtd>
<html>
<adal>
<meta http-equiv = contenu contenu contenu = text / html; charse = gbk>
<Title> Soumettre </TITME>
<script type = text / javascript src = http: //k.kbcdn.com/js/yui/build/utitilities/utibles.js> </ script>
</ head>
<body>
<form id = form1 action = https: //www.vevb.com> </ form>
<script type = text / javascript>
var form = document.getElementById ('form1');
// Événement de registre YUI
Yahoo.util.event.on ('form1', 'soumider', function () {
alert ('yui');
});
// Événement de registre DOM0
form.onsubmit = fonction () {
alerte (1);
};
// Événement de registre DOM2
if (form.addeventListener) {
form.addeventListener ('soumi', function () {
alerte (2);
}, FAUX);
// IE Register Event
} else if (form.attachevent) {
form.attachevent ('onsubmit', fonction () {
alerte (2);
});
}
// IE Fire Event
if (form.fireevent) {
form.fireevent ('onsubmit');
form.submit ();
// Événement de feu DOM2
} else if (document.createevent) {
var ev = document.createEvent ('htmlevents');
ev.initevent («soumettre», false, vrai);
form.dispatchEvent (ev);
}
</cript>
</docy>
</html>
Il y a un petit problème avec toute la course. Sous FX, Form.Submit () n'est pas nécessaire. J'ai directement soumis le formulaire, donc cette phrase est également enregistrée. Veuillez répondre si vous connaissez la raison.
Cette démo a été testée sous IE6 / IE7 / FX.