是否有可能禁用表单字段使用CSS?我当然知道禁用属性,但是否有可能在CSS规则中指定这一点?比如——
<input type="text" name="username" value="admin" >
<style type="text/css">
input[name=username] {
disabled: true; /* Does not work */
}
</style>
我问的原因是,我有一个应用程序,其中表单字段是自动生成的,字段隐藏/显示基于一些规则(在Javascript中运行)。现在我想扩展它以支持禁用/启用字段,但规则的编写方式是直接操作表单字段的样式属性。因此,现在我必须扩展规则引擎来更改属性以及表单字段的样式,但不知何故,这似乎不太理想。
奇怪的是,CSS中有可见和显示属性,但没有启用/禁用。在尚未开发的HTML5标准或非标准(特定于浏览器)中是否存在类似内容?
既然规则是在JavaScript中运行的,为什么不使用JavaScript(或者在我的例子中使用jQuery)禁用它们呢?
$('#fieldId').attr('disabled', 'disabled'); //Disable
$('#fieldId').removeAttr('disabled'); //Enable
更新
attr函数不再是主要的方法,正如在下面的评论中指出的那样。这是用prop函数完成的。
$( "input" ).prop( "disabled", true ); //Disable
$( "input" ).prop( "disabled", false ); //Enable
指针事件的变体:none;解决方案,解决输入仍然可以通过它的标签控件或tabindex访问的问题,是将输入包装在div中,这是一个样式为禁用文本输入,并设置输入{可见性:隐藏;}当输入被“禁用”时。
裁判:https://developer.mozilla.org/en-US/docs/Web/CSS/visibility的值
div.dependant {
border: 0.1px solid rgb(170, 170, 170);
background-color: rgb(235,235,228);
box-sizing: border-box;
}
input[type="checkbox"]:not(:checked) ~ div.dependant:first-of-type {
display: inline-block;
}
input[type="checkbox"]:checked ~ div.dependant:first-of-type {
display: contents;
}
input[type="checkbox"]:not(:checked) ~ div.dependant:first-of-type > input {
visibility: hidden;
}
<form>
<label for="chk1">Enable textbox?</label>
<input id="chk1" type="checkbox" />
<br />
<label for="text1">Input textbox label</label>
<div class="dependant">
<input id="text1" type="text" />
</div>
</form>
上面片段中应用的禁用样式来自Chrome UI,可能在视觉上与其他浏览器上禁用的输入不相同。可能它可以使用特定于引擎的CSS扩展-prefixes为各个浏览器定制。虽然乍一看,我不认为它可以:
微软CSS扩展,Mozilla CSS扩展,WebKit CSS扩展
引入额外的值visibility: disabled或display: disabled或甚至appearance: disabled似乎更明智,因为visibility: hidden已经影响了可应用元素和相关控制元素的行为。
输入(name =用户名){
禁用:真实;/*不起作用*/}
我知道这个问题很老了,但对于遇到这个问题的其他用户来说,我认为禁用输入的最简单的方法就是通过':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>
在现实中,如果你有一些脚本来禁用输入动态/自动与javascript或jquery,将自动禁用基于你添加的条件。
以jQuery为例:
if (condition) {
// Make this input prop disabled state
$('input').prop('disabled', true);
}
else {
// Do something else
}
希望CSS中的答案能有所帮助。
既然规则是在JavaScript中运行的,为什么不使用JavaScript(或者在我的例子中使用jQuery)禁用它们呢?
$('#fieldId').attr('disabled', 'disabled'); //Disable
$('#fieldId').removeAttr('disabled'); //Enable
更新
attr函数不再是主要的方法,正如在下面的评论中指出的那样。这是用prop函数完成的。
$( "input" ).prop( "disabled", true ); //Disable
$( "input" ).prop( "disabled", false ); //Enable