是否可以使用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标准中,甚至是非标准的(浏览器特定的)是否有类似的东西?
答案 0 :(得分:133)
您可以使用CSS伪造禁用的效果。
pointer-events:none;
您可能还想更改颜色等。
答案 1 :(得分:101)
由于规则是在JavaScript中运行的,为什么不使用javascript(或者在我的示例中使用jQuery)禁用它们?
$('#fieldId').attr('disabled', 'disabled'); //Disable
$('#fieldId').removeAttr('disabled'); //Enable
<强>更新强>
attr
函数不再是主要方法,正如下面的评论中所指出的那样。现在使用prop
函数完成此操作。
$( "input" ).prop( "disabled", true ); //Disable
$( "input" ).prop( "disabled", false ); //Enable
答案 2 :(得分:66)
这可能会有所帮助:
<input type="text" name="username" value="admin" >
<style type="text/css">
input[name=username] {
pointer-events: none;
}
</style>
<强>更新强>
如果想要从标签索引中禁用,您可以这样使用它:
<input type="text" name="username" value="admin" tabindex="-1" >
<style type="text/css">
input[name=username] {
pointer-events: none;
}
</style>
答案 3 :(得分:54)
很奇怪你在CSS中有可见和显示属性但没有启用/禁用。
你觉得这很好奇很奇怪。你误解了CSS的目的。 CSS并不意味着更改表单元素的行为。这意味着只改变他们的风格。隐藏文本字段并不意味着文本字段不再存在,或者提交表单时浏览器不会发送其数据。它只是将其隐藏在用户眼中。
要实际停用字段,必须使用HTML中的disabled
属性或JavaScript中的disabled
DOM属性。
答案 4 :(得分:19)
您无法使用CSS来禁用文本框。 解决方案是HTML属性。
disabled="disabled"
答案 5 :(得分:17)
实际的解决方案是使用CSS实际隐藏输入。
为了得出这个结论,你可以为每个实际输入编写两个html输入(一个启用,一个禁用),然后使用javascript控制CSS显示和隐藏它们。
答案 6 :(得分:9)
第一次回答某事,似乎有点迟了......
我同意通过javascript进行,如果您已经在使用它。
对于复合结构,就像我通常使用的那样,我已经创建了一个css伪后元素来阻止用户交互中的元素,并允许样式而不必操纵整个结构。
例如:
<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>
我可以在包裹disabled
div
课程
.disabled {
position : relative;
color : grey;
}
.disabled:after {
position :absolute;
left : 0;
top : 0;
width : 100%;
height : 100%;
content :' ';
}
这将是div
中的灰色文本,并使其无法用户使用。
答案 7 :(得分:5)
我一直在使用:
input.disabled {
pointer-events:none;
color:#AAA;
background:#F5F5F5;
}
然后将css类应用于输入字段:
<input class="disabled" type="text" value="90" name="myinput" id="myinput" />
答案 8 :(得分:3)
输入[name = username] { 禁用:true; / *不起作用* /}
我知道这个问题很老但是对于遇到此问题的其他用户,我认为禁用输入的最简单方法是“禁用”
<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中的答案有所帮助。
答案 9 :(得分:2)
你不能这样做我害怕,但如果你不想在字段中添加属性,你可以在jQuery中执行以下操作。只需将其放在<head></head>
标记
$(document).ready(function(){
$(".inputClass").focus(function(){
$(this).blur();
});
});
如果要在DOM中生成字段(使用JS),则应该这样做:
$(document).ready(function(){
$(document).on("focus", ".inputClass", function(){
$(this).blur();
});
});
答案 10 :(得分:1)
这可以通过在输入元素的顶部放置叠加层来实现非关键目的。这是我在纯HTML和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>
答案 11 :(得分:1)
为此目的无法使用CSS。 我的建议是包含一个javascript代码,您可以在其中分配或更改应用于输入的css类。 这样的事情:
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>
答案 12 :(得分:0)
pointer-events: none;
解决方案的一种变体,它解决了仍可以通过标记为control或tabindex进行访问的输入的问题,将输入包装在div中,该div样式为禁用的文本输入,并且输入“禁用”时设置input { visibility: hidden; }
。
参考:https://developer.mozilla.org/en-US/docs/Web/CSS/visibility#Values
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为各个浏览器进行自定义。尽管乍一看,但我认为它不可能:
Microsoft CSS extensions,Mozilla CSS extensions,WebKit CSS extensions
考虑到visibility: disabled
已经影响了行为,引入附加值display: disabled
或appearance: disabled
甚至是visibility: hidden
似乎更为明智。任何适用元素的相关控制元素。