Je pensais qu'ils pourraient l'être, mais comme je ne mets pas mon argent là où ma bouche (pour ainsi dire) définir l'attribut en lecture seule ne semble en fait rien faire.
Je préfère ne pas utiliser Désactivé, car je veux que les cases cochées soient soumises avec le reste du formulaire, je ne veux tout simplement pas que le client puisse les modifier dans certaines circonstances.
readonly
)readonly
! Pourquoi alors cet attribut existerait!readonly
n'est qu'un attribut côté client pour aider un navigateur à restituer correctement un site, puis à en construire la requête correcte. Le serveur ne peut pas et ne doit pas connaître l'readonly
attribut de la page rendue. Il doit supposer que la demande est venue de n'importe où (et peut-être avec des intentions malveillantes); ne comptez jamais sur les entrées fournies par l'utilisateur. Pourquoi envoyer une valeur de case à cocher que vous ne pouvez pas modifier dans une demande (si vous définissez la valeur avant le rendu, vous connaissez déjà la valeur lorsque la demande est soumise, il n'est donc pas nécessaire de la transmettre dans la demande)readonly
attribut existe là pour une raison quelconque. Cela n'a certainement rien à voir avec l'implémentation côté serveur. Mais il est là pour dire à l'utilisateur "Hé! Cette valeur est supposée ici, et / mais vous ne pouvez pas la changer."Réponses:
vous pouvez utiliser ceci:
Cela fonctionne parce que renvoyer false à partir de l'événement click arrête la chaîne d'exécution de continuer.
la source
checked="checked"
, ne jouez pas avec le javascript. Le javascript est juste là pour forcer les clics de souris à être ignorés sur l'objet d'entrée, pas pour définir l'état de la case à cocher.READONLY
ne fonctionne pas sur les cases à cocher car il vous empêche de modifier la valeur d' un champ , mais avec une case à cocher, vous modifiez en fait l' état du champ (on || off)De faqs.org :
Si vous ne souhaitez pas utiliser
disabled
mais souhaitez toujours soumettre la valeur, que diriez-vous de soumettre la valeur en tant que champ masqué et d'imprimer simplement son contenu à l'utilisateur lorsqu'il ne répond pas aux critères de modification? par exemplela source
Il s'agit d'une case à cocher que vous ne pouvez pas modifier:
Ajoutez simplement
disabled="disabled"
un attribut.Modifier pour répondre aux commentaires:
Si vous souhaitez que les données soient publiées, une solution simple consiste à appliquer le même nom à une entrée masquée:
De cette façon, lorsque la case à cocher est définie sur «désactivée», elle ne sert qu'à la représentation visuelle des données, au lieu d'être réellement «liée» aux données. Dans le post de retour, la valeur de l'entrée masquée est envoyée lorsque la case à cocher est désactivée.
la source
Mais vous DEVEZ absolument valider les données sur le serveur pour vous assurer qu'elles n'ont pas été modifiées.
la source
une autre "solution simple":
la source
name
et lesvalue
attributs de votre boîte factice,="checked"
ainsi que les="diabled"
valeurs d' attribut peuvent être supprimées. w3.org/TR/html-markup/input.checkbox.htmlCela présente un peu un problème de convivialité.
Si vous souhaitez afficher une case à cocher, mais ne pas l'interagir, pourquoi même une case à cocher alors?
Cependant, mon approche serait d'utiliser désactivé (L'utilisateur s'attend à ce qu'une case désactivée ne soit pas modifiable, au lieu d'utiliser JS pour que celle activée ne fonctionne pas), et ajouter un gestionnaire de soumission de formulaire à l'aide de javascript qui active les cases à cocher juste avant que le formulaire ne soit soumis. De cette façon, vous obtenez vos valeurs affichées.
c'est à dire quelque chose comme ça:
la source
avec jquery:
ce serait quand même une bonne idée de donner un indice visuel (css, texte, ...), que le contrôle n'acceptera pas les entrées.
la source
$(':checkbox[readonly]')
de sélectionner toutes les cases à cocher candidates car lareadonly
valeur d'attribut est facultative.Je l'ai utilisé pour obtenir les résultats:
la source
J'ai remarqué la solution donnée ci-dessous. En trouvé mes recherches pour le même numéro. Je ne sais pas qui l'a posté mais il n'a pas été fait par moi. Il utilise jQuery:
Cela rendrait les cases à cocher en lecture seule, ce qui serait utile pour afficher les données en lecture seule au client.
la source
la source
onclick="javascript: return true;"
fait simplement agir comme une case à cocher normale. Conseils? Merci!checked
attribut et restezfalse
en place.Réponse tardive, mais la plupart des réponses semblent trop compliquer les choses.
Si je comprends bien, le PO voulait essentiellement:
Il convient de noter que:
disabled
attribut, car il «souhaite que les cases cochées soient soumises avec le reste du formulaire».yes
oufalse
, mais peut être n'importe quel texte.Par conséquent, puisque l'
readonly
attribut ne fonctionne pas, la meilleure solution, ne nécessitant pas de javascript, est:Donc, pour une case cochée:
Pour une case à cocher non cochée:
Le principal problème avec les entrées désactivées, en particulier les cases à cocher, est leur faible contraste qui peut être un problème pour certains avec certains handicaps visuels. Il peut être préférable d'indiquer une valeur par des mots simples, tels que
Status: none
ouStatus: implemented
, mais en incluant l'entrée masquée ci-dessus lorsque celle-ci est utilisée, comme:la source
La plupart des réponses actuelles ont un ou plusieurs de ces problèmes:
Ce qui suit est simple et ne présente aucun de ces problèmes.
Si la case à cocher est en lecture seule, elle ne changera pas. Si ce n'est pas le cas, ce sera le cas. Il utilise jquery, mais vous l'utilisez probablement déjà ...
Ça marche.
la source
la source
Si vous souhaitez qu'ils soient soumis au serveur avec un formulaire mais ne soient pas interactifs pour l'utilisateur, vous pouvez les utiliser
pointer-events: none
dans css ( fonctionne dans tous les navigateurs modernes sauf IE10 et Opera 12 ) et définir tab-index-1
pour empêcher toute modification via le clavier. Notez également que vous ne pouvez pas utiliser delabel
balise car cliquer dessus changera de toute façon l'état.la source
for
attribut. Dans ce cas, vous pouvez utiliserinput[type="checkbox"][readonly] + label { pointer-events: none !important; }
.label
et ajoutétabindex
? Comment définissez-vous le focus sur un élément flou pour y appuyer un espace?<input type="checkbox" onclick="return false" />
fonctionnera pour vous, j'utilise cela source
Certaines des réponses ici semblent un peu détournées, mais voici un petit hack.
puis dans jquery vous pouvez choisir l'une des deux options:
La
démo: http://jsfiddle.net/5WFYt/
la source
En s'appuyant sur les réponses ci-dessus, si vous utilisez jQuery, cela peut être une bonne solution pour toutes les entrées:
J'utilise ceci avec Asp.Net MVC pour définir certains éléments de formulaire en lecture seule. Ce qui précède fonctionne pour le texte et les cases à cocher en définissant tout conteneur parent comme .readonly, comme dans les scénarios suivants:
la source
la source
Je sais que "désactivé" n'est pas une réponse acceptable, car l'op veut qu'il poste. Cependant, vous devrez toujours valider les valeurs côté serveur MÊME si l'option en lecture seule est définie. En effet, vous ne pouvez pas empêcher un utilisateur malveillant de publier des valeurs à l'aide de l'attribut en lecture seule.
Je suggère de stocker la valeur d'origine (côté serveur) et de la désactiver. Ensuite, lorsqu'ils soumettent le formulaire, ignorez toutes les valeurs publiées et prenez les valeurs d'origine que vous avez stockées.
Il ressemblera et se comportera comme une valeur en lecture seule. Et il gère (ignore) les publications d'utilisateurs malveillants. Vous tuez 2 oiseaux avec une pierre.
la source
J'aurais commenté la réponse de ConroyP, mais cela nécessite 50 points de réputation que je n'ai pas. J'ai assez de réputation pour poster une autre réponse. Désolé.
Le problème avec la réponse de ConroyP est que la case à cocher est rendue immuable en ne l'incluant même pas sur la page. Bien que Electrons_Ahoy ne le stipule pas autant, la meilleure réponse serait celle dans laquelle la case à cocher immuable serait similaire, sinon la même que la case à cocher modifiable, comme c'est le cas lorsque l'attribut "désactivé" est appliqué. Une solution qui répond aux deux raisons invoquées par Electrons_Ahoy pour ne pas vouloir utiliser l'attribut "désactivé" ne serait pas nécessairement invalide car elle a utilisé l'attribut "désactivé".
Supposons deux variables booléennes, $ vérifié et $ désactivé:
La case à cocher s'affiche comme cochée si $ vérifié est vrai. La case à cocher est affichée comme décochée si $ checké est faux. L'utilisateur peut modifier l'état de la case à cocher si et seulement si $ désactivé est faux. Le paramètre "mon_nom" n'est pas publié lorsque la case n'est pas cochée, par l'utilisateur ou non. Le paramètre "my_name = 1" est publié lorsque la case est cochée, par l'utilisateur ou non. Je crois que c'est ce que Electrons_Ahoy recherchait.
la source
Non, les cases à cocher ne peuvent pas être lues uniquement.
Mais vous pouvez les faire en lecture seule avec javascript!
Ajoutez ce code n'importe où et à tout moment pour que les cases à cocher fonctionnent en lecture seule comme prévu, en empêchant l'utilisateur de le modifier de quelque manière que ce soit.
Vous pouvez ajouter ce script à tout moment après le chargement de jQuery.
Cela fonctionnera pour les éléments ajoutés dynamiquement.
Cela fonctionne en ramassant l'événement click (qui se produit avant l'événement change) sur n'importe quel élément de la page, il vérifie ensuite si cet élément est une case à cocher en lecture seule, et si c'est le cas, il bloque la modification.
Il y a tellement de ifs pour que cela n'affecte pas les performances de la page.
la source
Utilisez simplement une balise désactivée simple comme celle ci-dessous.
la source
une autre idée consiste à utiliser une superposition et couvrir votre entrées en lecture seule
http://pure-essence.net/2011/09/22/jquery-read-only-elements/
la source
Si vous voulez que TOUTES vos cases soient "verrouillées" pour que l'utilisateur ne puisse pas changer l'état "coché" si l'attribut "en lecture seule" est présent, alors vous pouvez utiliser jQuery:
Ce qui est cool avec ce code, c'est qu'il vous permet de changer l'attribut "en lecture seule" sur tout votre code sans avoir à relier chaque case.
Cela fonctionne également pour les boutons radio.
la source
La principale raison pour laquelle les gens souhaitent une case à cocher en lecture seule et (également) un groupe radio en lecture seule est pour que les informations qui ne peuvent pas être modifiées puissent être présentées à l'utilisateur sous la forme dans laquelle elles ont été entrées.
OK désactivé le fera - malheureusement, les commandes désactivées ne sont pas accessibles au clavier et tombent donc sous le coup de toutes les lois sur l'accessibilité. Ceci est le plus gros blocage en HTML que je connaisse.
la source
Contribuer très très tard ... mais de toute façon. Au chargement de la page, utilisez jquery pour désactiver toutes les cases à cocher sauf celle actuellement sélectionnée. Ensuite, définissez celui actuellement sélectionné en lecture seule afin qu'il ait un aspect similaire à ceux désactivés. L'utilisateur ne peut pas modifier la valeur et la valeur sélectionnée est toujours soumise.
la source
Très tard pour la fête mais j'ai trouvé une réponse pour MVC (5) J'ai désactivé la CheckBox et ajouté un HiddenFor AVANT la case à cocher, donc quand il publie s'il trouve le champ Hidden en premier et utilise cette valeur. Cela fonctionne.
la source
J'utiliserais l'attribut en lecture seule
Utilisez ensuite CSS pour désactiver les interactions:
Notez que l'utilisation de la pseudo-classe: lecture seule ne fonctionne pas ici.
la source
READONLY lui-même ne fonctionnera pas. Vous pouvez peut-être faire quelque chose de génial avec CSS, mais nous les désactivons généralement.
AVERTISSEMENT: S'ils sont affichés, le client peut les modifier, point final. Vous ne pouvez pas compter uniquement sur readon pour empêcher un utilisateur de changer quelque chose. Le pourrait toujours utiliser fiddler ou simplement chane le html w / firebug ou quelque chose comme ça.
la source
Ma solution est en fait l'opposé de la solution de FlySwat, mais je ne sais pas si cela fonctionnera pour votre situation. J'ai un groupe de cases à cocher et chacune a un gestionnaire onClick qui soumet le formulaire (ils sont utilisés pour modifier les paramètres de filtre pour une table). Je ne veux pas autoriser plusieurs clics, car les clics suivants après le premier sont ignorés. Je désactive donc toutes les cases à cocher après le premier clic et après avoir soumis le formulaire:
onclick="document.forms['form1'].submit(); $('#filters input').each(function() {this.disabled = true});"
Les cases à cocher sont dans un élément span avec un ID de "filtres" - la deuxième partie du code est une instruction jQuery qui parcourt les cases à cocher et désactive chacune d'elles. De cette façon, les valeurs des cases à cocher sont toujours soumises via le formulaire (puisque le formulaire a été soumis avant de les désactiver), et cela empêche l'utilisateur de les modifier jusqu'à ce que la page se recharge.
la source