J'ai une case à cocher qui, dans certaines conditions, doit être désactivée. Il s'avère que HTTP ne publie pas les entrées désactivées.
Comment puis-je contourner cela? soumettre l'entrée même si elle est désactivée et garder l'entrée désactivée?
html
forms
html-input
Un apprenti
la source
la source
Réponses:
MISE À JOUR :
READONLY
ne fonctionne pas sur les cases à cocherVous pouvez utiliser
disabled="disabled"
mais à ce stade, la valeur de la case à cocher n'apparaîtra pas dans lesPOST
valeurs. L'une des stratégies consiste à ajouter un champ masqué contenant la valeur de la case à cocher dans le même formulaire et à lire la valeur à partir de ce champChangez simplementdisabled
enreadonly
la source
<input name="foo" value="bar" readonly="readonly" />
readonly
ne fonctionnera pas car vous ne pourrez pas publier la valeur d'une case à cocher avec une telle balise, utilisezdisabled
avec l'élément d'entrée masqué pour contenir la valeur de la case à cocher, voyez comment: stackoverflow.com/a/8274787/448816J'ai résolu ce problème.
Puisque la
readonly="readonly"
balise ne fonctionne pas (j'ai essayé différents navigateurs), vous devez utiliser à ladisabled="disabled"
place. Mais la valeur de votre case à cocher ne sera pas publiée alors ...Voici ma solution:
Pour obtenir l' apparence "lecture seule" et la valeur de la case à cocher POST en même temps, ajoutez simplement une "entrée" masquée avec le même nom et la même valeur que votre case à cocher . Vous devez le conserver à côté de votre case à cocher ou entre les mêmes
<form></form>
balises:Aussi, juste pour vous faire savoir
readonly="readonly", readonly="true", readonly="",
ou tout simplementREADONLY
ne résoudra PAS cela! J'ai passé quelques heures à le découvrir!Cette référence n'est pas non plus pertinente (peut-être pas encore, ou plus, je n'en ai aucune idée): http://www.w3schools.com/tags/att_input_readonly.asp
la source
Si vous êtes satisfait d'utiliser JQuery, supprimez l'attribut désactivé lors de la soumission du formulaire:
la source
<select>
ou<textfield>
ou d'autres éléments HTML qui prennent en charge l'disabled
attribut, vous pouvez les sélectionner et tous les activer avec:$( "*:disabled" ).removeAttr("disabled");
Vous pouvez le gérer de cette façon ... Pour chaque case à cocher, créez un champ masqué avec le même
name
attribut. Mais définissez la valeur de ce champ masqué avec une valeur par défaut que vous pouvez tester. Par exemple..Si la case est "cochée" lorsque le formulaire est soumis, la valeur de ce paramètre de formulaire sera
Si la case n'est pas cochée, la valeur serait
Vous pouvez utiliser n'importe quelle valeur au lieu de "false", mais vous voyez l'idée.
la source
Je suis parti du problème: "comment POST / Soumettre une case à cocher d'entrée désactivée?" et dans ma réponse, j'ai sauté le commentaire: "Si nous voulons désactiver une case à cocher, nous devons sûrement conserver une valeur préfixée (cochée ou décochée) et nous voulons également que l'utilisateur en soit conscient (sinon nous devrions utiliser un type caché et pas une case à cocher) ". Dans ma réponse, j'ai supposé que nous voulions toujours garder une case à cocher et que le code fonctionne de cette manière. Si nous cliquons sur cette case à cocher, elle sera vérifiée pour toujours et sa valeur sera POSTED / Submitted! De la même manière si j'écris onclick = "this.checked = false" sans coché = "vérifié" (note: la valeur par défaut n'est pas cochée), il sera à jamais décoché et sa valeur ne sera pas POSTED / Submitted !.
la source
créer une classe css par exemple:
appliquer cette classe au lieu de l'attribut désactivé
la source
Le moyen le plus simple d'y parvenir est:
Cela empêchera l'utilisateur de décocher cette case et il soumettra toujours sa valeur lorsque le formulaire sera soumis. Supprimer coché si vous souhaitez que l'utilisateur ne puisse pas cocher cette case.
En outre, vous pouvez utiliser javascript pour effacer le clic une fois qu'une certaine condition a été remplie (si c'est ce que vous recherchez). Voici un violon sale qui montre ce que je veux dire. Ce n'est pas parfait, mais vous comprenez l'essentiel.
http://jsfiddle.net/vwUUc/
la source
Ça fonctionne super bien:
Le seul inconvénient est le bref clignotement des champs de saisie désactivés lors de la soumission. Au moins dans mon scénario, ce n'est pas vraiment un problème!
la source
Ne le désactivez pas; au lieu de cela, définissez-le sur lecture seule, bien que cela n'ait aucun effet car il ne permet pas à l'utilisateur de modifier l'état. Mais vous pouvez utiliser jQuery pour appliquer cela (empêcher l'utilisateur de modifier l'état de la case à cocher:
Cela suppose que toutes les cases à cocher que vous ne souhaitez pas modifier ont l'attribut "lecture seule". par exemple.
la source
Puisque:
Je vais vous offrir une autre possibilité:
Définissez votre case à cocher comme désactivée comme d'habitude. Et avant que le formulaire ne soit soumis par l'utilisateur, activez cette case à cocher par JavaScript.
La case à cocher étant activée avant l'envoi du formulaire, sa valeur est publiée de manière courante. La seule chose qui n'est pas très agréable dans cette solution est que cette case à cocher devient activée pendant un certain temps et qu'elle peut être vue par les utilisateurs. Mais c'est juste un détail avec lequel je peux vivre.
la source
Malheureusement, il n’existe pas de solution «simple». L'attribut lecture seule ne peut pas être appliqué aux cases à cocher. J'ai lu la spécification W3 sur la case à cocher et j'ai trouvé le coupable:
Si un contrôle n'a pas de valeur actuelle lorsque le formulaire est soumis, les agents utilisateurs ne sont pas tenus de le traiter comme un contrôle réussi. ( http://www.w3.org/TR/html401/interact/forms.html#h-17.13.2 )
Cela provoque l'état non vérifié et l'état désactivé pour aboutir à la même valeur analysée.
Le seul moyen fiable de le faire est d' ajouter une entrée masquée avec le même nom avec javascript lors de la soumission du formulaire .
Vous pouvez utiliser le petit extrait que j'ai créé pour cela:
Cela recherche le premier formulaire dans le document, rassemble toutes les entrées et recherche les entrées désactivées. Lorsqu'une entrée désactivée est trouvée, une entrée masquée est créée dans le parentNode avec le même nom et la valeur 'on' (si son état est 'vérifié') et '' (si son état est '' - non vérifié).
Cette fonction doit être déclenchée par l'événement 'onsubmit' dans l'élément FORM comme:
la source
Ajoutez
onsubmit="this['*nameofyourcheckbox*'].disabled=false"
au formulaire.la source
Il n'y a pas d'autre option qu'un
hidden
champ, alors essayez d'utiliser unhidden
champ comme illustré dans le code ci-dessous:la source
La fonction some_name est un exemple de clause précédente pour gérer la deuxième case à cocher qui est cochée (publie sa valeur) ou décochée (ne publie pas sa valeur) selon la clause et l'utilisateur ne peut pas modifier son statut; il n'est pas nécessaire de gérer la désactivation de la deuxième case à cocher
la source
Vous pouvez le garder désactivé à votre guise, puis supprimer l'attribut désactivé avant l'envoi du formulaire.
la source
Ajout de
onclick="this.checked=true"
Résoudre mon problème:Exemple:
la source
Voici un autre travail qui peut être contrôlé depuis le backend.
ASPX
Dans ASPX.CS
La classe n'est ajoutée qu'à des fins de style.
la source
Je viens de combiner les suggestions HTML, JS et CSS dans les réponses ici
HTML:
jQuery:
CSS:
Puisque l'élément n'est pas «désactivé», il passe toujours par le POST.
la source