Est-il possible de désactiver les champs de formulaire à l'aide de CSS? Je connais bien sûr l'attribut désactivé, mais est-il possible de le spécifier dans une règle CSS? Quelque chose comme -
<input type="text" name="username" value="admin" >
<style type="text/css">
input[name=username] {
disabled: true; /* Does not work */
}
</style>
La raison pour laquelle je pose cette question est qu’il existe une application dans laquelle les champs de formulaire sont générés automatiquement et masqués/affichés en fonction de certaines règles (qui s’exécutent en Javascript). Maintenant, je souhaite l'étendre pour prendre en charge la désactivation/l'activation des champs, mais la manière dont les règles sont écrites permet de manipuler directement les propriétés de style des champs de formulaire. Alors maintenant, je dois étendre le moteur de règles pour modifier les attributs ainsi que le style des champs de formulaire et, d'une manière ou d'une autre, cela semble moins qu'idéal.
Il est très curieux que vous ayez des propriétés visibles et d'affichage en CSS, mais pas d'activer/de désactiver. Y a-t-il quelque chose de similaire dans le standard HTML5 encore sous-fonctionné, ou même quelque chose de non standard (spécifique au navigateur)?
Vous pouvez simuler l'effet désactivé en utilisant CSS.
pointer-events:none;
Vous voudrez peut-être aussi changer de couleur, etc.
Puisque les règles fonctionnent en JavaScript, pourquoi ne pas les désactiver en utilisant javascript (ou dans mon exemple, jQuery)?
$('#fieldId').attr('disabled', 'disabled'); //Disable
$('#fieldId').removeAttr('disabled'); //Enable
UPDATE
La fonction attr
n’est plus la principale approche, comme il a été souligné dans les commentaires ci-dessous. Ceci est maintenant fait avec la fonction prop
.
$( "input" ).prop( "disabled", true ); //Disable
$( "input" ).prop( "disabled", false ); //Enable
Cela peut être utile:
<input type="text" name="username" value="admin" >
<style type="text/css">
input[name=username] {
pointer-events: none;
}
</style>
Mise à jour:
et si vous voulez désactiver l'index de tabulation, vous pouvez l'utiliser de cette façon:
<input type="text" name="username" value="admin" tabindex="-1" >
<style type="text/css">
input[name=username] {
pointer-events: none;
}
</style>
Il est très curieux que vous ayez des propriétés visibles et d'affichage en CSS, mais pas d'activer/de désactiver.
C'est très curieux que vous pensiez que c'est très curieux. Vous ne comprenez pas le but de CSS. CSS n'a pas pour vocation de modifier le comportement des éléments de formulaire. Il est destiné à changer leur style uniquement. Le fait de masquer un champ de texte ne signifie pas que celui-ci n'existe plus ou que le navigateur n'enverra pas ses données lorsque vous soumettez le formulaire. Tout ce qu'il fait est de le cacher aux yeux de l'utilisateur.
Pour désactiver réellement vos champs, vous devez utiliser l'attribut disabled
en HTML ou la propriété disabled
DOM en JavaScript.
Vous ne pouvez pas utiliser CSS pour désactiver Textbox. La solution serait l'attribut HTML.
disabled="disabled"
La solution pratique consiste à utiliser CSS pour masquer l’entrée.
Pour en arriver à sa conclusion naturelle, vous pouvez écrire deux entrées HTML pour chaque entrée réelle (une activée et une désactivée), puis utiliser javascript pour contrôler le code CSS afin de le montrer et de le masquer.
première réponse à quelque chose, et apparemment juste un peu en retard ...
J'accepte de le faire en javascript, si vous l'utilisez déjà.
Pour une structure composite, comme je l’utilise habituellement, j’ai créé un pseudo élément css afin de bloquer les éléments de l’interaction de l’utilisateur et d’autoriser le style sans avoir à manipuler toute la structure.
Par exemple:
<div id=test class=stdInput>
<label class=stdInputLabel for=selecterthingy>A label for this input</label>
<label class=selectWrapper>
<select id=selecterthingy>
<option selected disabled>Placeholder</option>
<option value=1>Option 1</option>
<option value=2>Option 2</option>
</select>
</label>
</div>
Je peux placer une classe disabled
sur l'emballage div
.disabled {
position : relative;
color : grey;
}
.disabled:after {
position :absolute;
left : 0;
top : 0;
width : 100%;
height : 100%;
content :' ';
}
Cela aurait pour effet de rendre le texte gris dans la variable div
et de le rendre inutilisable pour l'utilisateur.
J'utilise toujours:
input.disabled {
pointer-events:none;
color:#AAA;
background:#F5F5F5;
}
puis en appliquant la classe css au champ de saisie:
<input class="disabled" type="text" value="90" name="myinput" id="myinput" />
input [nom = nom d'utilisateur] {disabled: true; /* Ne marche pas */ }
Je sais que cette question est assez ancienne, mais pour les autres utilisateurs qui rencontrent ce problème, je suppose que le moyen le plus simple de désactiver la saisie est tout simplement par ': disabled'
<input type="text" name="username" value="admin" disabled />
<style type="text/css">
input[name=username]:disabled {
opacity: 0.5 !important; /* Fade effect */
cursor: not-allowed; /* Cursor change to disabled state*/
}
</style>
En réalité, si vous avez un script pour désactiver l’entrée de manière dynamique/automatique avec JavaScript ou jQuery, cette option sera automatiquement désactivée en fonction de la condition que vous avez ajoutée.
Dans jQuery par exemple:
if (condition) {
// Make this input prop disabled state
$('input').prop('disabled', true);
}
else {
// Do something else
}
J'espère que la réponse en CSS aide.
Vous ne pouvez pas le faire, j'en ai bien peur, mais vous pouvez effectuer les opérations suivantes dans jQuery si vous ne souhaitez pas ajouter les attributs aux champs. Il suffit de placer ceci dans votre balise <head></head>
$(document).ready(function(){
$(".inputClass").focus(function(){
$(this).blur();
});
});
Si vous générez les champs dans le DOM (avec JS), procédez comme suit:
$(document).ready(function(){
$(document).on("focus", ".inputClass", function(){
$(this).blur();
});
});
Cela peut être fait à des fins non critiques en plaçant une superposition au-dessus de votre élément d'entrée. Voici mon exemple en HTML pur et CSS.
https://jsfiddle.net/1tL40L99/
<div id="container">
<input name="name" type="text" value="Text input here" />
<span id="overlay"></span>
</div>
<style>
#container {
width: 300px;
height: 50px;
position: relative;
}
#container input[type="text"] {
position: relative;
top: 15px;
z-index: 1;
width: 200px;
display: block;
margin: 0 auto;
}
#container #overlay {
width: 300px;
height: 50px;
position: absolute;
top: 0px;
left: 0px;
z-index: 2;
background: rgba(255,0,0, .5);
}
</style>
Il n'y a aucun moyen d'utiliser CSS à cette fin. Mon conseil est d'inclure un code javascript dans lequel vous affectez ou modifiez la classe css appliquée aux entrées. Quelque chose comme ca :
function change_input() {
$('#id_input1')
.toggleClass('class_disabled')
.toggleClass('class_enabled');
$('.class_disabled').attr('disabled', '');
$('.class_enabled').removeAttr('disabled', '');
}
.class_disabled { background-color : #FF0000; }
.class_enabled { background-color : #00FF00; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<form>
Input: <input id="id_input1" class="class_enabled" />
<input type="button" value="Toggle" onclick="change_input()";/>
</form>