是否有可能禁用表单字段使用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标准或非标准(特定于浏览器)中是否存在类似内容?


当前回答

恐怕你不能这样做,但如果你不想在字段中添加属性,你可以在jQuery中执行以下操作。只要把它放在<head></head>标签内

$(document).ready(function(){ 
  $(".inputClass").focus(function(){
    $(this).blur();
  }); 
});

如果你在DOM中生成字段(用JS),你应该这样做:

$(document).ready(function(){ 
  $(document).on("focus", ".inputClass", function(){
    $(this).blur();
  }); 
});

其他回答

既然规则是在JavaScript中运行的,为什么不使用JavaScript(或者在我的例子中使用jQuery)禁用它们呢?

$('#fieldId').attr('disabled', 'disabled'); //Disable
$('#fieldId').removeAttr('disabled'); //Enable

更新

attr函数不再是主要的方法,正如在下面的评论中指出的那样。这是用prop函数完成的。

$( "input" ).prop( "disabled", true ); //Disable
$( "input" ).prop( "disabled", false ); //Enable

奇怪的是,CSS中有可见和显示属性,但没有启用/禁用。

你误解了CSS的目的。CSS并不意味着要改变表单元素的行为。这只是为了改变他们的风格。隐藏文本字段并不意味着文本字段不再存在,或者当您提交表单时浏览器不会发送它的数据。它所做的只是把它从用户的眼睛中隐藏起来。

要真正禁用字段,必须在HTML中使用disabled属性或在JavaScript中使用disabled DOM属性。

这可以通过在输入元素上叠加来实现非关键目的。下面是纯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>

你可以使用CSS来伪装禁用效果。

pointer-events:none;

你可能还想改变颜色等等。

恐怕你不能这样做,但如果你不想在字段中添加属性,你可以在jQuery中执行以下操作。只要把它放在<head></head>标签内

$(document).ready(function(){ 
  $(".inputClass").focus(function(){
    $(this).blur();
  }); 
});

如果你在DOM中生成字段(用JS),你应该这样做:

$(document).ready(function(){ 
  $(document).on("focus", ".inputClass", function(){
    $(this).blur();
  }); 
});