Ne case à cocher uniquement les entrées de données de postes s'ils sont vérifiés?
Est-ce comportement standard pour les navigateurs de n'envoyer que la case de saisie de données de la valeur si elle est cochée sur le formulaire de soumission?
Et si aucune valeur de données est fournie, la valeur par défaut est toujours "on"?
En supposant que le ci-dessus est correcte, cela est-il compatible comportement sur tous les navigateurs?
Vous devez vous connecter pour publier un commentaire.
Oui, norme de comportement est la valeur n'est envoyée que si la case est cochée. Généralement, cela signifie que vous devez disposer d'un moyen de cases à cocher se souvenir de ce qui vous attend sur le serveur depuis pas toutes les données provient du formulaire.
La valeur par défaut est toujours "on", ce devrait être compatible sur tous les navigateurs.
Ce qui est couvert dans le W3C recommandation HTML 4:
<select>
avec deux optionson
etoff
🙂En HTML, chaque
<input />
élément est associé à une seule (mais pas unique) nom et une valeur paire. Cette paire est envoyé dans la suite de la demande (dans ce cas, un POST du corps de la requête) que si le<input />
est "réussi".Donc si vous avez ces entrées dans votre
<form>
DOM:Génèrent ces nom+paires de valeur, qui sera soumis au serveur:
Avis que:
two
etsix
ont été exclus parce qu'ils avaient ledisabled
ensemble d'attributs.three
a été envoyé deux fois parce qu'il avait deux entrées valides avec le même nom.four
n'a pas été envoyé parce que c'est uncheckbox
qui n'a pas étéchecked
six
n'a pas été envoyé en dépit d'êtrechecked
parce que ledisabled
attribut a une priorité plus élevée.seven
ne dispose pas d'unname=""
attribut envoyé, de sorte qu'il n'est pas soumis.À l'égard de votre question: vous pouvez voir que d'une case à cocher n'est pas cochée sera donc de ne pas avoir son nom+valeur paire envoyée au serveur, mais d'autres intrants qui partagent le même nom sera envoyé avec elle.
Cadres comme ASP.NET MVC contourner ce par (subrepticement) jumelage chaque
checkbox
entrée avec unhidden
entrée dans le rendu HTML, comme ceci:Rend:
Si l'utilisateur ne cochez pas la case, puis le suivant sera envoyé au serveur:
Si l'utilisateur ne cochez la case, puis les deux vont être envoyées:
Mais le serveur ignorera la
=false
version parce qu'il voit la=true
version, et donc si elle ne voit pas=true
il peut déterminer que la case a été rendue et que l'utilisateur n'a pas le vérifier - par opposition à laSomeBooleanProperty
entrées n'étant pas rendu à tous.[]
à la fin de la saisie du nom, le comportement par défaut est de ne soumettre que le dernier élément de ce nom, donc tant que le caché d'entrée est devant la case, il va fonctionner.[]
suffixe n'est pas une partie de la spécification du HTML, les navigateurs ne le traitez pas spécialement. Sans le[]
PHP ne permettre l'accès qu'à une seule valeur (dernière valeur) au lieu de toutes les valeurs.get
vous pouvez voir les deux paires nom / valeur sont énumérées l'une après l'autre:http://www.example.com/page.html?subscribe=true&subscribe=false
. Peut-être que certains serveurs de transformer de multiples nom de valeurs dans un tableau sur le côté serveur?Si la case n'est pas cochée, elle ne contribue pas à les données envoyées sur le formulaire de soumission.
HTML5 section 4.10.22.4 de la Construction de la forme de l'ensemble de données décrit la façon dont les données du formulaire est construit:
et puis le défaut évalués
on
est spécifié sivalue
est manquant:Donc décoché les cases à cocher sont ignorés pendant des données de formulaire de la construction.
Un comportement similaire est exigée en vertu de HTML4. Il est raisonnable de s'attendre à ce comportement de la part de tous conformes à la norme navigateurs.
Les cases à cocher sont l'affichage de la valeur 'on' si et seulement si la case est cochée. Insted d'attraper la case de valeur, vous pouvez utiliser caché entrées
JS:
HTML:
Oui, parce que sinon il n'y aurait aucun moyen de déterminer si la case a été effectivement cochée ou pas (si elle a modifié la valeur, le cas peut exister lorsque la valeur souhaitée s'il a été vérifié serait le même que celui qu'il a été échangé à l').
D'autres réponses confirment que "on" est la valeur par défaut. Toutefois, si vous n'êtes pas intéressés par la valeur, il suffit d'utiliser:
De spécification HTML 4, qui devrait être cohérente sur presque tous les navigateurs:
http://www.w3.org/TR/html401/interact/forms.html#checkbox
Succès est défini comme suit:
input type="hidden" name="is_main" valeur="0"
input type="checkbox" name="is_main" value="1"
de sorte que vous pouvez contrôler, comme ce que j'ai fait dans l'application.
si elle vérifie ensuite envoyer la valeur 1 sinon 0
Aucune des réponses ci-dessus, m'a convaincu.
J'ai trouvé la meilleure solution consiste à inclure un caché d'entrée avant chaque case d'entrée avec le même nom.
<input type="hidden" name="foo[]" value="off"/>
<input type="checkbox" name="foo[]"/>
Puis sur le côté serveur, en utilisant un peu de l'algorithme que vous pouvez obtenir quelque chose de plus comme le HTML devrait fournir.
Ce sera l'entrée crue
Et la fonction retournera
J'ai une page (formulaire) qui génère dynamiquement case pour ces réponses ont été d'une grande aide. Ma solution est très semblable à beaucoup ici, mais je peux pas m'empêcher de penser qu'il est plus facile à mettre en œuvre.
D'abord j'ai mis un caché zone de saisie en ligne avec ma case , c'est à dire
Maintenant, si tout le
checkboxes
sont non-sélectionnés, puis les valeurs retournées par le champ caché sera tous d'être éteint.Par exemple, ici avec cinq insérés dynamiquement des cases à cocher, la forme
POSTS
les valeurs suivantes:Cela montre que seulement la 3ème et la 4ème cases sont
on
ouchecked
.Dans l'essence de l'mannequin ou champ caché indique simplement que tout est éteint, sauf si il y a un "sur" ci-dessous le hors indice, qui vous donne l'indice dont vous avez besoin sans une seule ligne de code côté client.
.
Comme ASP.NET variante, à l'exception de placer le caché d'entrée avec le même nom avant la case (du même nom). Seule la dernière valeur sera envoyé. De cette façon, si une case est cochée alors son nom et la valeur "on" est envoyé, alors que si elle est désactivée, puis le nom du correspondant caché d'entrée et de la valeur que vous pourriez donner, il sera envoyé. En fin de compte, vous obtiendrez le $_POST tableau à lire, avec tous enregistrés et non des éléments qui le composent, "sur" et "fausses" valeurs", pas de doubles de clés. Facile à traiter en PHP.
Avoir le même problème avec décoché les cases qui ne sera pas envoyer sur les formes soumettre, je suis sorti avec une autre solution que le miroir de la case des éléments.
Arriver tout décoché les cases à cocher avec
J'ai résolu le problème avec ce code:
Formulaire HTML
et la fonction javascript par le changement de la case de valeur:
et le serveur vérifie si les données post est "on" ou "off". J'ai utilisé playframework java