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 ?
Réponses
Trop de publicités?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.
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é.
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.
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.