soumission multi-formes en chrome IE et Google

voix
1

J'ai plusieurs formes ( l' utilisateur peut ajouter une nouvelle forme dynamique) dans une page, ils sont tous soumis à la même action struts2. Je dois soumettre toutes ces formes lorsque l'utilisateur clique sur le bouton Enregistrer.

Les choses vont bien dans FF. Mais dans IE et Google Chrome, seul le dernier formulaire est soumis.

Toute aide est appréciée. Je vous remercie.

Les éléments de chaque forme sont les mêmes, une forme d' un objet. Les données de chaque formulaire seront ajoutés à un objet de domaine, l'objet sera persisté à DB.

JavaScript fonction pour gérer opération de sauvegarde:

<script type=text/javascript >
    function submit() {
        var formCnt = document.getElementById('formCnt').value;
        for(var i = 1; i <= formCnt; i++) {
            var formName = 'form' + i;
            document.forms[formName].submit();
        }
    }
</script>
...
<input type=hidden id=formCnt name=formCnt value=5 />

<form action=add.htm name=form1 id=form1 method=post enctype=multipart/form-data />
     <input type=text name=item.price id=item.price value= />
    ...
</form>

<form action=add.htm name=form2 id=form2 method=post enctype=multipart/form-data />
     <input type=text name=item.price id=item.price value= />
    ...
</form>

    ...

<form action=add.htm name=form5 id=form5 method=post enctype=multipart/form-data />
     <input type=text name=item.price id=item.price value= />
    ...
</form>

   ...
Créé 27/08/2009 à 06:21
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
0

Vous ne devriez être en mesure de présenter une forme à la fois. Un bouton de soumission doit être à l' intérieur de <form>balises, et seule la forme que ce bouton est en doit être soumis. Ce caché inputétiquette , il devrait être dans une balise de forme ainsi BTW.

Même quand le faire via JS, un submit()initie une nouvelle POSTrequête au serveur. Vous ne pouvez faire une demande à la fois, c'est la raison pour laquelle seule la dernière apparaît. Je ne sais pas pourquoi il travaillerait en FF.

Si vous avez besoin de tout soumettre à la fois de toute façon, pourquoi le casser pour commencer? Si vous voulez « sous - sections » sous une forme, vous pouvez utiliser les <fieldset>balises.

modifier

Qu'est - ce qui se passe lorsque vous exécutez votre script est le même que si tous vos formulaires ont un bouton d' envoi, et vous cliquez sur tous les boutons afin rapide soumet des . Un clic sur un bouton d' envoi envoie les données de ce formulaire au serveur dans une POSTdemande et actualise la page. Si vous êtes assez rapide pour cliquer sur un autre bouton avant la page est actualisée, vous pouvez soumettre une autre forme, l'ancienne demande sera annulée.

La seule façon que je peux imaginer comment les données de toutes les formes pourraient éventuellement obtenir au serveur la façon dont vous le faire est de savoir si la demande arrive à envoyer avant le prochain submit()est déclenché. Essentiellement , vous comptez sur le navigateur étant lent, ou tout au moins le traitement de la demande avant de poursuivre l'exécution du script. Apparemment , cela fonctionne dans FF, mais échoue dans d' autres navigateurs. Comme il se doit.

edit 2

Si vous devez soumettre plusieurs champs avec le même nom, utilisez une forme et donner à vos champs noms uniques. Le meilleur schéma de nommage dépend de comment votre back - end soumissions de formulaire.

  • item0, item1
  • item.0, item.1
  • Model.0.item, Model.1.item
Créé 27/08/2009 à 06:29
source utilisateur

voix
0

Je crois que vous êtes seulement autorisé à présenter un seul à la fois - cela pourrait être une mauvaise pratique, mais que diriez-vous de dupliquer essentiellement chaque code de formulaires et la réplication dans un iframe, en soumettant le formulaire là, que ce soit ou se fondant sur XHR ($. post) pour mimer ce que les formes feraient.

Créé 27/08/2009 à 06:32
source utilisateur

voix
0

essayez d' utiliser à la document.getElementById(formId).submit();place. les document.form.x, document.forms [entier], document.forms [id], et des procédés de document.x de formes accéder ne sont pas compatibles avec des moyens multi-navigateur de référence à un formulaire.

En outre - Je crois que je une fois eu un problème quand j'avais la fois un nom et un identifiant sur ma forme. La meilleure pratique consiste à utiliser id je crois.

Créé 27/08/2009 à 07:02
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more