342 votes

Afficher les cases à cocher qui sont désactivés

J’ai une charge de cases à cocher qui sont par défaut vérifié. Mes utilisateurs seront probablement décocher quelques uns des cases (le cas échéant) et laisser le reste d'entre eux vérifié. Y a-t-il un moyen d’obtenir les cases qui ne sont pas vérifiées dans un post de formulaire, plutôt que ceux qui est cochés ?

537voto

Sam Points 2858

La solution que j’ai aimé le plus jusqu'à présent est de mettre une entrée cachée avec le même nom que la case à cocher qui ne pourrait pas être vérifiée. Je pense que cela fonctionne pour que si la case n’est pas cochée, l’entrée cachée est toujours réussi et envoyé au serveur, mais si la case est cochée, qu'elle remplace l’entrée cachée devant lui. De cette façon, que vous n’avez pas à garder une trace de quelles valeurs les données publiées étaient censés provenir de cases à cocher.

239voto

vishnu Points 466

Suivant la solution a fonctionné pour moi

Ajout d’un champ masqué pour le contrôle checkbox avec un ID différent

Avant de soumettre le formulaire, désactivé le champ masqué basé sur l’État checked

27voto

SimonSimCity Points 1403

Mon favori personnel est d'ajouter un champ caché avec le même nom qui sera utilisé si la case n'est pas cochée. Mais la solution n'est pas aussi facile qu'il y paraît.

Si vous ajoutez ce code:

<form>
  <input type='hidden' value='0' name='selfdestruct'>
  <input type='checkbox' value='1' name='selfdestruct'>
</form>

Le navigateur ne sera pas vraiment se soucier de ce que vous faites ici. Le navigateur va envoyer deux paramètres pour le serveur, et le serveur doit décider quoi faire avec eux.

PHP par exemple prend la dernière valeur à utiliser (voir: Autorité de la position de la double requête HTTP GET clés)

Mais d'autres systèmes, j'ai travaillé avec (basé sur Java) faire de la manière dont - ils vous offrir uniquement la première valeur. .NET au lieu de cela vous donnera un tableau avec ces deux éléments, au lieu

Je vais essayer de tester avec node.js, Python et Perl à un moment donné.

20voto

Shailesh Kumar Points 2484

Une technique courante de contourner cela est d'effectuer une variable cachée le long de chaque case.

<input type="checkbox" name="mycheckbox" />
<input type="hidden" name="mycheckbox.hidden"/>

Sur le côté serveur, nous avons d'abord détecter liste de variables cachées et pour chaque variable cachée, nous essayons de voir si la case correspondante entrée est présentée sous la forme de données ou non.

Du côté serveur, l'algorithme serait probablement ressembler à:

for input in form data such that input.name endswith .hidden
  checkboxName = input.name.rstrip('.hidden')
  if chceckbName is not in form, user has unchecked this checkbox

Le ci-dessus n'est pas exactement la réponse à la question, mais fournit un autre moyen de parvenir à une fonctionnalité similaire.

11voto

Bart van Heukelom Points 11977

Vous pouvez faire du Javascript dans le formulaire soumettre événement. C’est tout que vous pouvez faire cependant, il n’y a aucun moyen d’obtenir des navigateurs pour ce faire par eux-mêmes. Cela signifie aussi que votre formulaire se cassera pour les utilisateurs sans Javascript. C’est mieux de savoir sur le serveur quelles cases à cocher, il y a donc vous pouvez en déduire que ceux absents des valeurs formulaire envoyé ( `` en PHP) sont désactivés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X