2009-03-08 5 views
2

Travailler avec XHTML 1.1Pourquoi les checkboxes/radiobuttons et les options ne sont-ils pas réinitialisables s'ils ont été définis par PHP?

J'ai cette page de connexion gérée en php. Il contient plusieurs cases à cocher, radiobuttons et une liste déroulante.

Il y a beaucoup de formchecking derrière et si quelque chose ne sort pas, la page se recharge et toutes les valeurs sont remplacées à leur place, sauf pour les mots de passe.

Cela signifie que les éléments <select>, <input type="radio" et <input type="checkbox" qui ont été sélectionnés sont re-sélectionnés.

Pourtant, quand je regarde le code source, les pièces checked="checked" et selected="selected" sont manquantes. Mais vu que la page rechargée les a sélectionnés, ils doivent avoir été implémentés.

Pourtant quand je clique sur mon bouton <input type="reset", rien ne se passe. Le ne pas être dé-sélectionné. Il est amusant, lorsque je sélectionne d'autres cases à cocher, boutons radio et changer la sélection, la réinitialisation fonctionne, mais seulement sur les cases à cocher et les boutons radio nouvellement cliqués.

Encore plus bizarre est le fait que lorsque je clique sur reset, les boutons radio, les cases à cocher et les sélections ne disparaissent pas, ils reviennent à celui qui a été coché ou sélectionné quand PHP a forcé la page à recharger.

Que se passe-t-il ici? En utilisant Firefox en passant, en vérifiant maintenant IE.

EDIT: IE même problème.

+0

IE ne prend pas en charge XHTML/1.1. Si la page s'ouvre dans IE, ce n'est pas XHTML. – Kornel

Répondre

2

Si vous utilisez "Afficher la source" et que le script définit des en-têtes no-cache agressifs, il est possible que le code source de ce qui s'affiche ne s'affiche pas. Essayez-le dans quelque chose qui montre le DOM en direct, comme Firebug ou l'inspecteur DOM.

+0

Merci, Firebug fait l'affaire, il montre le code checked = "checked". Toujours pas d'améliorations avec la réinitialisation mais ... – Vordreller

+0

Il semble que vous ne compreniez pas à quoi sert le bouton de réinitialisation. Tout ce qu'il fait est de remettre les champs de formulaire à leur état lorsque la page est chargée, cela ne les effacera pas tous. Si vous voulez que vous ayez besoin de javascript. – flussence

+0

C'est juste un malentendu alors, je pensais que le bouton de réinitialisation ne se comportait pas comme il se doit. – Vordreller

0

(Quel navigateur?)

Quoiqu'il en soit, ce comportement (de ne pas remettre à zéro toutes les commandes) est par la conception, la navigation autrement et remplir des formulaires dans le web serait une expérience horrible (où la plupart des formulaires ont été remis à zéro par un erreur unique).

Il y a aussi rafraîchissement (comme F5) et rafraîchissement "réel" (Ctrl-F5) qui réinitialisera toujours la page complètement.

1

Si les attributs checked = "checked" et selected = "selected" manquent dans votre code après le rechargement de PHP, alors la seule explication pour eux apparaissant est que votre navigateur se souvient de ses valeurs et les restaure. Cela expliquerait probablement aussi le reste du comportement. Je suggérerais de m'assurer que le code PHP génère correctement les attributs cochés/sélectionnés et que le reste devrait prendre soin de lui-même.

+0

J'ai débogué le code PHP et il y avait une erreur. Corrigé, les variables recevaient la bonne chaîne à saisir et quand la page est chargée, elle n'est toujours pas là. J'utilise Firefox en passant. – Vordreller

0

Je ne suis pas sûr de la cause de tous vos problèmes, mais je vais vous donner une ventilation rapide sur la façon dont la méthode de réinitialisation de formulaire par défaut javascripts fonctionne.

Supposons que vous avez la forme suivante:

<form id="myForm> 
    <input type="text" name="textField1" value="" /> 
    <input type="text" name="textField2" value="test1" /> 
    <input type="text" name="textField3" value="test2" /> 

    <input type="checkbox" name="checkbox1" value="box1" /> 
    <input type="checkbox" name="checkbox2" value="box2" checked /> 
</form> 

Et TextField1 vous mettez Foo Et TextField2 vous mettez Bar Et TextField2 vous mettez Baz

Et puis vous cochez les deux cases à cocher . Remettre ensuite la forme

myForm.reset(); 

Les champs de formulaire seront maintenant les suivantes:

TextField1 = "" TextField2 = "test1" TextField3 = "test2"

checkbox1 = PAS cochée checkbox2 = checked

Que se passe-t-il si la méthode de réinitialisation ne "supprime" pas le formulaire qu'elle définit à toutes les valeurs par défaut du formulaire.

Espérons que cela aide un peu.

Questions connexes