2009-09-08 8 views
1

J'ai un formulaire avec plusieurs boutons de soumission, dont chacun est pertinent à la façon dont l'utilisateur veut les données enregistrées et/ou chargées. Le problème est (ou était) que si un utilisateur appuyait sur entrer la dernière (ou toute autre) entrée dans le formulaire, le bouton d'envoi qui semblait être appelé était le "chargement enregistré formé" qui est en haut de la forme. Toutes les tentatives d'utilisateur javascript pour avoir le bouton de retour par défaut sur le "formulaire de sauvegarde" semblaient inutiles, presque comme si le navigateur était trop occupé à soumettre le formulaire pour avoir des interférences. Enfin, dans FireFox 3.5, le script côté serveur faisait écho à ce qu'il avait reçu pour la variable post et a découvert qu'aucune des valeurs du bouton d'envoi n'était transmise au serveur. Comme il se trouve, j'ai des crochets dans le script pour quand l'utilisateur frappe "Enregistrer" ou "Enregistrer et imprimer", etc, mais si l'utilisateur utilise la "page de chargement" il met simplement à jour une variable et continue de charger la page normalement avec cette variable en contexte.Est-ce que toutes les friandises du navigateur entrent (clé 13) le même formulaire?

Donc, sans aucune valeur de bouton de soumission, il a fait la même chose, il a simplement chargé la page.

Ainsi, à la grande question:

Est-ce le comportement du navigateur typique? Peut-être même un comportement de navigateur fiable? Est-ce que frapper frappe entrer toujours le formulaire comme si aucun bouton de soumission n'avait été appuyé, ou est-ce que certains navigateurs aiment choisir un bouton à utiliser par défaut quand l'utilisateur appuie sur entrer?

Si c'est un comportement typique, quel est le plan d'action suggéré? J'allais faire en sorte que le script enregistre n'importe quoi, peu importe quoi, tant qu'il y avait des données dans le formulaire, mais ensuite je me suis rendu compte que c'était encore plus dangereux, parce que si l'utilisateur chargeait un formulaire sauvé, former les dates et les hits "Load Form", alors il va enregistrer les données de formulaire du formulaire perméable pour les nouvelles dates qu'ils ont demandées.

je considérais sa mise en place afin que changer les données du formulaire de charge (sélectionne avec les dates et autres détails) dégageraient le formulaire afin que le serveur recieved encore une forme vide et ne serait donc pas écraser les données précédentes, mais est risqué aussi, car beaucoup d'utilisateurs noteront et penseront que leurs données ont été perdues, etc., et il y a toujours une petite chance que l'utilisateur en finisse avec le formulaire, monte au sommet et tripote le formulaire -load sélectionne juste pour confirmer qu'ils ont choisi le bon choix et ensuite être forcé de repartir de zéro. Je devrais juste avoir deux formes, une pour charger, une pour les données, mais le problème avec cela est que toutes les données dans la partie de chargement du formulaire sont utilisées par le formulaire principal. Je pourrais écrire plus de js pour combiner les deux sur soumettre, ou cacher les données dans la deuxième forme, mais tout cela semble maladroit. Essentiellement, j'ai besoin d'une configuration telle que la partie supérieure du formulaire soit indépendante de la forme principale, mais pas vice versa. Soumettre la forme supérieure ne soumet pas le plus bas, mais soumettre le plus bas soumet le plus haut.

Bon, j'ai assez longtemps. Fondamentalement, je me demande si une solution existe déjà ou si quelqu'un d'autre a rencontré cela et a trouvé une solution intelligente. Je pensais simplement avoir la forme enregistrer chaque fois que le formulaire n'était pas vide était assez intelligent, jusqu'à ce qu'il me vienne à l'esprit que lorsque l'utilisateur va à la page, il charge automatiquement le formulaire le plus applicable, changeant ainsi les variables de charge sera presque toujours causé des problèmes.


Après avoir lu le double possible que Artelius était assez bon pour attirer mon attention, je ne suis toujours pas clair sur la cohérence entre les différents navigateurs en ce qui concerne le bouton Enter comme soumettre. Il semble que presque tout le monde dans cette question a supposé que frapper pressait le premier envoi disponible, qui était aussi mon hypothèse jusqu'à ce qu'un ami m'a suggéré de cacher (via CSS) un autre bouton de soumission en haut du formulaire avec tout ce que je voulais entrer pour atteindre. C'est quand cela m'a donné les mêmes résultats que j'ai finalement vu ce qui était passé au serveur (c'est-à-dire rien en termes de valeur de soumission). Cela signifie donc que ce soit

a) la touche « entrée en aucun bouton soumettre simplement soumettre » est un nouveau comportement pour certains ou tous les navigateurs,

b) la touche « entrée comme simplement soumettre » vs « Enter en premier le bouton d'envoi » c) Tout le monde continue de supposer que le bouton "entrer en tant que premier envoi" est le cas parce que la plupart d'entre nous seulement le code if (situation1) else (assume not situation1) et aucun d'entre nous vraiment sûr de ce que fait le navigateur.

Je doute fortement que ce soit le dernier, mais encore une fois, je doute aussi que la plupart d'entre nous savent quels navigateurs font quoi. J'aimerai bien qu'il y ait une réponse directe que je pourrais transmettre. Oh, et enfin: Bien que je sache qu'il serait beaucoup plus simple d'utiliser les boutons, et je prends cela sérieusement en considération, je voudrais aussi considérer d'autres options, puisque vraiment le seul besoin de moins de boutons de soumission, j'ai est pour quand les utilisateurs frappent entrer au lieu d'un des boutons.

En fait, me laissent aller à une seconde de plus:

La seule chose que je vraiment besoin de savoir est si oui ou non ils ont frappé entrer par l'une des entrées de texte. Si je pouvais transmettre cela au serveur, je saurais si je devrais enregistrer ou recharger le formulaire. Mais le problème est (ou du moins ce que j'ai eu des problèmes avec), c'est que lorsque l'utilisateur frappe entrer dans une entrée, il semble qu'il n'y a plus de temps de jeu avec js pour capturer quoi que ce soit, et dans certains cas comme le navigateur déclenche le onclick pour n'importe quel bouton de soumission et donc ne me permettant pas vraiment de connaître l'événement réel qui a déclenché cela. Je jouerai plus avec jquery, mais ce comportement a-t-il été observé par quelqu'un d'autre?

+0

double possible: http : // stackoverflow.com/questions/48/multiple-soumettre-boutons-sur-un-formulaire – Artelius

+0

Doh! Bonne prise. J'aimerais quand même avoir plus de rétroaction sur s'il y a une façon de faire 2 formulaires mais dont l'un déclenche l'autre (pour ainsi dire). – Anthony

Répondre

1

Mon meilleur conseil serait d'avoir seulement sur le bouton de soumission, et laissez soumettre ce qui est l'utilisation la plus courante du formulaire. Laissez le reste des boutons juste être des boutons normaux, sur lesquels vous pouvez accrocher des événements de clic. Assurez-vous d'indiquer clairement quel bouton sera "enfoncé" lorsque l'utilisateur clique sur Entrée. Laissez le bouton "soumettre" être le plus gros. Si vous avez 3 boutons qui sont utilisés autant, je n'aurais plus de bouton de soumission ...

éditer: Je suis sûr que la plupart des navigateurs afficheront toutes les données dans un formulaire. Si vous voulez faire des vérifications sur les données avant l'affichage pouvez ajouter un écouteur pour onsubmit

<form onsubmit="checkData(this);" ... > 

En passant this vous permettra de vérifier quelle forme est en fait soumis:

function checkData(form) { 
    var formName = form.id; 
    //check all the data based on which form is being submitted 
} 
+0

Il existe deux jeux de boutons. Un ensemble est juste le bouton de charge, qui est aussi le létal. Je vais essayer de définir cela comme un bouton, mais quand je l'ai fait auparavant, je n'avais toujours aucun moyen de savoir si l'utilisateur tapait ou voulait simplement charger un formulaire différent, comme avec au moins FF 3.5, pas le bouton Soumettre la valeur est passée. Donc je suis toujours coincé sur ce qu'il faut faire s'il y a des données post mais pas de valeur de soumission qui indique au formulaire s'il faut sauvegarder ou non (et donc écraser un formulaire sauvegardé intentionnellement ou involontairement) – Anthony

+0

Savez-vous si la plupart les navigateurs transmettent TOUTES les données de formulaire (qui ont une valeur légitime) au serveur si les deux formulaires ont la même action? Je suppose que non ... – Anthony