141 votes

comment POST/Soumettre une boîte de contrôle d'entrée qui est désactivée ?

J'ai une case à cocher qui, sous certaines conditions, doit être désactivée. Il s'avère que HTTP n'affiche pas les entrées désactivées.

Comment puis-je contourner ce problème ? En soumettant l'entrée même si elle est désactivée et en gardant l'entrée désactivée ?

0 votes

Je pense que cette solution est également utile ici : stackoverflow.com/questions/12769664/

0 votes

Je pense que cette solution est également utile ici : stackoverflow.com/questions/12769664/

113voto

Francesco Laurita Points 12027

UPDATE : READONLY ne fonctionne pas sur les cases à cocher

Vous pourriez utiliser disabled="disabled" mais à ce stade, la valeur de la case à cocher n'apparaîtra pas dans le fichier POST valeurs. L'une des stratégies consiste à ajouter un champ caché contenant la valeur de la case à cocher dans le même formulaire et à lire la valeur à partir de ce champ.

Changez simplement disabled à readonly

8 votes

Pour que ce soit du HTML valide, il faut spécifiquement définir la valeur de readonly à readonly, c'est-à-dire : <input name="foo" value="bar" readonly="readonly" />

5 votes

Pour que le champ de saisie "readonly" ressemble au champ "disabled", définissez "style="color : grey ; background-color : #F0F0F0 ;"'.

3 votes

@MattHuggins La définition de la valeur pour les attributs de type only-attribute-name comme checked, readonly etc... et le slash final sur les attributs de type non-pair n'ont rien à voir avec la validité HTML - ils sont nécessaires pour la validité XHTML...

104voto

mik-T Points 916

J'ai résolu ce problème.

Depuis readonly="readonly" ne fonctionne pas (j'ai essayé différents navigateurs), vous devez utiliser la balise disabled="disabled" à la place. Mais la valeur de votre case à cocher ne sera pas affichée alors...

Voici ma solution :

Pour obtenir "en lecture seule" regard et POST la valeur de la case à cocher en même temps, ajoutez simplement une "entrée" cachée avec le même nom et la même valeur que votre case à cocher. . Vous devez le garder à côté de votre boîte à cocher ou entre les mêmes <form></form> tags :

<input type="checkbox" checked="checked" disabled="disabled" name="Tests" value="4">SOME TEXT</input>

<input type="hidden" id="Tests" name="Tests" value="4" />

Aussi, juste pour que vous sachiez readonly="readonly", readonly="true", readonly="", ou simplement READONLY ne résoudra PAS ce problème ! J'ai passé plusieurs heures à le résoudre !

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

0 votes

Il doit y avoir les mêmes identifiants pour les entrées cachées et les cases à cocher ?

0 votes

Non, Id peut être n'importe quoi, mais 'name' et 'value' doivent être les mêmes.

0 votes

Quelle est la fiabilité de ce système dans les différents navigateurs ?

77voto

Tristan Channing Points 449

Si vous vous contentez d'utiliser JQuery, supprimez l'attribut "disabled" lors de la soumission du formulaire :

$("form").submit(function() {
    $("input").removeAttr("disabled");
});

0 votes

Est-ce que cela rendra le contrôle "activé" dans l'interface utilisateur ?

0 votes

Il supprime l'attribut handicapé donc en théorie oui. En pratique, je ne pense pas que l'utilisateur puisse modifier le champ via l'interface utilisateur entre le moment où cela se produit et celui où le formulaire est soumis... Je serais intéressé de le savoir avec certitude.

0 votes

C'est un peu vieux, mais à titre d'anecdote : si vous utilisez la fonction <select> ou <textfield> ou d'autres éléments HTML qui prennent en charge la fonction disabled vous pouvez les sélectionner et les activer tous avec : $( "*:disabled" ).removeAttr("disabled");

10voto

jessegavin Points 20854

Vous pourriez le faire de cette façon... Pour chaque case à cocher, créez un champ caché avec le même nom que le champ name attribut. Mais définissez la valeur de ce champ caché avec une valeur par défaut que vous pourrez tester. Par exemple

<input type="checkbox" name="myCheckbox" value="agree" />
<input type="hidden" name="myCheckbox" value="false" />

Si la case à cocher est "cochée" lorsque le formulaire est soumis, la valeur de ce paramètre de formulaire sera la suivante

"agree,false"

Si la case n'est pas cochée, la valeur est la suivante

"false"

Vous pourriez utiliser n'importe quelle valeur à la place de "false", mais vous comprenez l'idée.

6 votes

Ne détestez-vous pas quand vous écrivez une solution compliquée à un problème et qu'au moment de rafraîchir la page, quelqu'un (comme Francesco) écrit une simple phrase ?)

0 votes

C'est parfait pour ce que j'essaie d'accomplir, je veux que la case à cocher non cochée soumette une valeur au lieu de rien, merci :D.

1 votes

@jessegavin Étant donné que son "simple one liner" ne fonctionne plus et qu'il a mis à jour sa réponse pour inclure la vôtre, non, je ne peux pas dire que je le fasse.

8voto

PaoloMarass Points 31
<input type="checkbox" checked="checked" onclick="this.checked=true" />

Je suis parti du problème : "comment POST/Submit une Input Checkbox qui est désactivée ?" et dans ma réponse j'ai sauté le commentaire : "Si nous voulons désactiver une case à cocher, nous devons certainement conserver une valeur préfixée (cochée ou non cochée) et nous voulons également que l'utilisateur en soit conscient (sinon nous devrions utiliser un type caché et non une case à cocher)". Dans ma réponse, j'ai supposé que nous voulions que la case à cocher soit toujours cochée et que le code fonctionne de cette façon. Si nous cliquons sur cette case à cocher, elle sera toujours cochée et sa valeur sera POSTED/Submitted ! De la même manière, si j'écris onclick="this.checked=false" sans checked="checked" (note : la valeur par défaut est unchecked), la case sera toujours décochée et sa valeur ne sera pas POSTED/Submitted !

0 votes

Cela va simplement reproduire ce que la case à cocher fait déjà, mais si elle a été désactivée par javascript ou autre, elle sera toujours désactivée. Pourriez-vous expliquer un peu plus ce que vous vouliez faire, peut-être que je ne comprends pas bien puisque ce n'est qu'une ligne de code ?

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