如何使用CSS禁用表单字段?

Anu*_*ain 152 html css

是否可以使用CSS禁用表单字段?我当然知道属性已禁用,但是可以在CSS规则中指定它吗?就像是 -

<input type="text" name="username" value="admin" >
<style type="text/css">
  input[name=username] {
    disabled: true; /* Does not work */
  }
</style>
Run Code Online (Sandbox Code Playgroud)

我问的原因是,我有一个应用程序,其中表单字段是自动生成的,并且字段是基于某些规则(在Javascript中运行)隐藏/显示的.现在我想扩展它以支持禁用/启用字段,但是编写规则的方式是直接操作表单字段的样式属性.所以现在我必须扩展规则引擎来更改属性以及表单字段的样式,并且不知何故它似乎不太理想.

很奇怪你在CSS中有可见和显示属性但没有启用/禁用.在仍然在工作中的HTML5标准,甚至是非标准的(浏览器特定的)是否有类似的东西?

ANa*_*imi 150

您可以使用CSS伪造禁用的效果.

pointer-events:none;
Run Code Online (Sandbox Code Playgroud)

您可能还想更改颜色等.

  • 这有助于,但不会阻止Tab键到字段中. (60认同)
  • @theonlygusti 禁用表单中的 &lt;input&gt; 元素将不会被提交。 (4认同)
  • 这也不会阻止提交表单值. (2认同)

Dut*_*432 104

由于规则是在JavaScript中运行的,为什么不使用javascript(或者在我的示例中,jQuery)禁用它们?

$('#fieldId').attr('disabled', 'disabled'); //Disable
$('#fieldId').removeAttr('disabled'); //Enable
Run Code Online (Sandbox Code Playgroud)

UPDATE

attr下面的评论所指出的,该功能不再是主要方法.现在使用该prop功能完成.

$( "input" ).prop( "disabled", true ); //Disable
$( "input" ).prop( "disabled", false ); //Enable
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是,如果用户禁用了JavaScript,此解决方案将无效. (6认同)
  • 仅供参考 - jQuery文档建议在这种情况下使用`.prop()`而不是`.attr()`."从jQuery 1.6开始,.attr()方法为尚未设置的属性返回undefined.要检索和更改DOM属性,例如表单元素的选中,选中或禁用状态,请使用.prop()方法. " 源文档:[.attr()](http://api.jquery.com/attr/)和[.prop()](http://api.jquery.com/prop/) (3认同)

Fer*_*ehy 71

这可能会有所帮助:

<input type="text" name="username" value="admin" >

<style type="text/css">
input[name=username] {
    pointer-events: none;
 }
</style>
Run Code Online (Sandbox Code Playgroud)

更新:

如果想要禁用tab索引,你可以这样使用它:

 <input type="text" name="username" value="admin" tabindex="-1" >

 <style type="text/css">
  input[name=username] {
    pointer-events: none;
   }
 </style>
Run Code Online (Sandbox Code Playgroud)

  • tab-index css属性不存在.它需要是一个html属性(tabindex = -1) (11认同)
  • 这看起来就像我想要禁用所有输入字段一样,但是,尽管它阻止了鼠标事件,但仍然可以使用键盘选项卡访问和更改它们 (3认同)

Bol*_*ock 54

很奇怪你在CSS中有可见和显示属性但没有启用/禁用.

你觉得这很好奇,这很奇怪.你误解了CSS的目的.CSS并不意味着改变表单元素的行为.这意味着只改变他们的风格.隐藏文本字段并不意味着文本字段不再存在,或者提交表单时浏览器不会发送其数据.它所做的就是将其隐藏在用户的眼前.

要实际禁用字段,必须使用disabledHTML中的属性或disabledJavaScript中的DOM属性.

  • 当然我知道CSS是"应该"的.但对于现代网络应用而言,"呈现"和"行为"之间的区别比泥泞更为混乱.由于禁用的字段未提交给服务器,因此行为更改.但那么如何隐藏所有表单字段而不是一个?!也许在过去很好的时候,你可以在网上做的只是阅读文字和填写表格,区别更清晰.在现代webapp中,如果要将表示与行为分开,CSS与HTML/JS是错误的方法. (31认同)
  • 禁用是一种状态,而不是一种行为.他所要求的是完全合理的.例如,您可能希望在处理数据时向多个字段添加繁忙类.此外,W3C似乎同意,因为它允许通过禁用的伪类选择CSS元素. (16认同)
  • CSS中有很多东西实际上可以被认为是*行为的变化*例如pointer-events:none; @ANaimi提到.所以禁用也可以很容易地被认为是显示属性.太糟糕了,不是,会让一些事情变得更容易. (4认同)
  • @IAmNaN:1)"残疾是一种状态,而不是一种行为." 所以其他每个HTML/DOM属性都是如此.2)"例如,您可能希望在处理数据时向多个字段添加繁忙的类." 你在脚本中这样做.3)"此外,W3C似乎同意,因为它允许CSS通过禁用的伪类选择元素." 能够*基于启用还是禁用来选择*元素与能够*使用CSS改变*状态无关. (3认同)
  • 问题在于,你虔诚地认为 CSS 纯粹且只与视觉样式相关,没有任何其他原因,只是你是这样教它的,这就是你理解它的方式。当然这是它的意图,但从技术上讲,CSS 是一个声明式规则引擎,并且认为您应该使用有缺陷的命令式编程方法来处理声明式规则引擎*只是*完美的事情,因为它们不符合您的任意分类“视觉”是愚蠢的。 (3认同)

mr_*_*air 20

您无法使用CSS来禁用文本框.解决方案是HTML属性.

disabled="disabled"
Run Code Online (Sandbox Code Playgroud)

  • 注意:具有"disabled"属性的元素**未提交** - 它们的值不会发布到服务器.请继续阅读:http://stackoverflow.com/q/8925716/1066234 (3认同)

gra*_*ine 17

实际的解决方案是使用CSS实际隐藏输入.

为了得到它的自然结论,你可以为每个实际输入写一个两个html输入(一个启用,一个禁用),然后使用javascript控制CSS显示和隐藏它们.

  • 如果您使用Javascript,根据需要禁用/启用是否有意义? (3认同)

Lar*_*chy 10

第一次回答什么,似乎有点迟了......

如果您已经使用它,我同意通过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>
Run Code Online (Sandbox Code Playgroud)

我可以disabled在包装上放一个课div

.disabled { 
    position : relative; 
    color    : grey;
}
.disabled:after {
    position :absolute;
    left     : 0;
    top      : 0;
    width    : 100%;
    height   : 100%;
    content  :' ';
}
Run Code Online (Sandbox Code Playgroud)

这将是灰色文本,div并使其无法用户使用.

我的例子JSFiddle

  • 顺便说一句:你仍然需要处理标签,这仍然允许用户到达现场并进行更改. (3认同)
  • 那么 &lt;select&gt; 不应该有一个 class="disabled" 吗? (2认同)

Sha*_*aze 7

输入[名称=用户名] { 禁用:真;/* 不起作用 */ }

我知道这个问题很老了,但对于遇到这个问题的其他用户,我想禁用输入的最简单方法就是通过 ':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>
Run Code Online (Sandbox Code Playgroud)

实际上,如果您有一些脚本可以使用 javascript 或 jquery 动态/自动禁用输入,这些脚本会根据您添加的条件自动禁用。

以jQuery为例:

if (condition) {
// Make this input prop disabled state
  $('input').prop('disabled', true);
}
else {
// Do something else
}
Run Code Online (Sandbox Code Playgroud)

希望 CSS 中的答案有所帮助。


Kai*_*ack 5

我一直在使用:

input.disabled {
    pointer-events:none;
    color:#AAA;
    background:#F5F5F5;
}
Run Code Online (Sandbox Code Playgroud)

然后将css类应用于输入字段:

<input class="disabled" type="text" value="90" name="myinput" id="myinput" />
Run Code Online (Sandbox Code Playgroud)