Question

Je suis en train d'intercepter toutes sortes de soumissions de formulaire pour un formulaire de specifc sur une page Web. Il semble être très simple avec jQuery. form.submit(function(e) {…}) et il fonctionne à merveille si je clique sur le bouton Soumettre

Cependant, il y a aussi une propriété onChange sur un champ de sélection qui fait this.form.submit() et il ressemble à cette appel mon auditeur contourne (en chrome / Firefox):

<script type="text/javascript">
    function submitForm(e) {
        window.alert('submitted');
        e.preventDefault();
        return false;
    }

    $(document).ready(function() {
        $('#bar').submit(submitForm);
    });
</script>

<form id="bar">
    <select name="name" onChange="this.form.submit()">
        <option>Foo</option>
        <option>Bar</option>
    </select>
    <br/>
    <input type="submit"/>
</form>

Il est évident que dans le code ci-dessus je pouvais changer simplement this.form.submit() à une référence spécifique de mon auditeur présenter. Cependant, dans mon application réelle, il est pas aussi simple que cela, donc je suis à la recherche de façon où je n'ai pas modifier la propriété onChange.

Si je ne fais pas une erreur stupide, mais cela est en fait attendre le comportement du navigateur, je serais vraiment heureux si vous pouviez expliquer le flux d'événements et pourquoi cela conduit à des symptômes décrits ci-dessus.

Était-ce utile?

La solution

L'appel de la méthode form.submit() ne déclenche pas l'événement submit, comme par exemple le réglage de la value d'une zone de texte ne déclenche pas l'événement change. Essayez de déclencher l'événement submit par jQuery au lieu:

<form id="bar">
    <select name="name" onChange="$('#bar').submit();">
        <option>Foo</option>
        <option>Bar</option>
    </select>
    <br/>
    <input type="submit"/>
</form>

Selon la documentation , l'action submit par défaut sur le formulaire sera tiré et le formulaire ci-joint être soumis.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top