web-dev-qa-db-fra.com

Javascript form.submit () ne fonctionne pas dans Firefox

Il y a plusieurs questions/réponses à ce sujet ici , ici et ici et ailleurs, mais elles semblent toutes spécifiques à JQuery et ne semblent pas s'appliquer à cela (par exemple, je NOT créant un nouvel objet Form, il s’agit d’un formulaire existant dans le document (et j’utilise PAS avec Jquery du tout).

J'ai un formulaire qui doit être modifié avant la soumission pour des raisons de compatibilité avec IE7. Je dois retirer toutes les balises BUTTON de mon formulaire, puis ajouter un champ masqué, mais tout cela se trouve dans un formulaire existant de la page HTML existante. Ce code fonctionne correctement dans IE et Chrome, mais ne fonctionne pas dans Firefox (les versions 23 et 24 ont toutes deux été testées).

    buttonClickFunction(formName, buttonObject) {
        var formObject = document.forms[formName];
        var i = 0;

        // Strip out BUTTON objects
        for (i=0;i<formObject.length;i++) {
            if (formObject[i].tagName === 'BUTTON') {
                formObject[i].parentNode.removeChild(formObject[i]);
                i--;
            }
        }

        // Create new field
        var newField = document.createElement('input');
        newField.type = 'hidden';
        newField.id=buttonObject.id;
        newField.name = buttonObject.name;
        if (buttonObject.attributes['value'] != null) {
            newField.value = buttonObject.attributes['value'].value;
        } else {
            newField.value = buttonObject.value;
        }

        // Submit form
        formObject.appendChild(newField);
        document.forms[formName].appendChild(newField);
        document.forms[formName].submit();
    }

En plus de document.forms[formName].submit(), j'ai aussi essayé formObject.submit() - les deux fonctionnent sous Chrome mais échouent sous Firefox. Je ne comprends pas pourquoi cela ne fonctionne pas - j'ai parcouru le JS et ai vu que document.forms[formName].submit() est exécuté - aucune exception n'apparaît mais rien ne va au serveur. 

Quelqu'un peut-il identifier pourquoi Firefox ne soumet pas ce formulaire et comment je peux le corriger?

14
user3120173

Firefox s'attend à ce qu'au moins un bouton d'envoi soit disponible lorsque vous soumettez un formulaire.

<button type="submit">Click me</button>

ou:

<input type="submit" value="Click me" />

Lorsque vous utilisez le premier dans votre code, cela ne fonctionnera pas (car vous supprimez tous les boutons avant de soumettre le formulaire). Lorsque vous utiliserez la deuxième option, cela fonctionnera également dans Firefox. Comme vous pouvez le voir dans ce violon: http://jsfiddle.net/q9Dzc/1/

19
g00glen00b

Pour toute personne ayant un problème avec l'envoi de Firefox avec le changement/rechargement de l'emplacement de la page, vous devez insérer votre code de redirection dans le rappel $ .post:

$(".form").submit(function(e){
    e.preventDefault();
    $.post("submit.php", {data: textData}, function(){
        history.go(-1);
    });
    return false;
});
0
SamJakob