在禁用IE的文本框中更改字体颜色

我注意到,你可以改变文本框中的文本颜色,在Firefox中禁用的应用一个简单的类,但无法在IE 6/7中做到这一点。 有没有人有一个优雅的解决scheme来实现这一目标。

我注意到,您可以更改Firefox中禁用的文本框中的文本颜色

我想这个问题想说的是这个:

<textarea disabled="disabled" style="color: red;">Hello</textarea> 

IE中的灰色文本结果,Fox中的红色结果。 FWIW,歌剧也给灰色,而WebKit浏览器给红色。

这是一个纯粹的CSS问题,根据操作系统的小部件集以及根据CSS规则多less渲染多less表单字段。 这一直是跨浏览器差异很大的领域。 脚本是不相关的,尽pipe如此,希望“使用jQuery”成为每个问题的答案。

通常的解决方法是使用“只读”而不是“禁用”,然后使用样式(例如基于'class =“disabled”')来重现所需的任何着色的禁用效果。 “只读”控件不会变成OS级别禁用的小部件,给您更多的自由风格。

应该注意的是,使用disabled属性会导致底层的<input>元素在表单提交期间不被提交,其中readonly控件被提交给服务器。 因此,如果您的服务器代码不期望来自该控件的值,则不应该只使用readonly

我的经验是,试图通过黑客来获取可接受的演示文稿通常是不值得的。 我build议你要么改变你的CSS,以便固定的IE禁用文本样式不与您的底层控件样式冲突,或者使用样式文本代替控件(因为禁用控件不能成功提交反正)。 使用浏览器,而不是反对它。

我对IE10中的<select>元素有同样的问题,并find了一个解决scheme:

http://jsbin.com/ujapog/90

有一个Microsoft psuedo元素,允许修改文本颜色:

 select[disabled='disabled']::-ms-value { color: #000; } 

该规则必须独立运行,否则其他浏览器将由于语法错误而忽略整个规则。 请参阅http://msdn.microsoft.com/en-us/library/ie/hh869604(v=vs.85).aspx其他Internet Explorer只psuedo元素。

编辑:在IE10中引入了-ms-value psuedo元素,所以不能在早期版本。

与IE的问题,它不能适用于禁用控件的风格,这就是为什么首先我们需要从我们的文本框中删除它,然后添加我们的风格,禁用侧重于控制。 我也尝试解除绑定('重点'),但没有奏效。

所以我用JQUERY来做这个:

 var disabledControls = $("input:disabled, textarea:disabled"); disabledControls.removeAttr('disabled'); disabledControls.addClass("is-disabled"); disabledControls.focus(function() { this.blur(); }); 

CSS类:

 .is-disabled { background-color: #EBEBEB; color: black !important; } 

在IE8 \ 9和Chrome中完美工作…

您可以使用以下内容模拟禁用字段行为:

 // find all disabled fields $("input:disabled, textarea:disabled, select:disabled").each(function(index){ // add the class is_disabled $(this).addClass("is_disabled"); // remove the attribut disabled $(this).removeAttr('disabled'); // add new attribut readonly $(this).attr('readOnly', 'readOnly'); }); // on submit remove all fields which are still with class is_disabled $('form').submit(function() { // find all fields with class is_isabled $("input.is_disabled, textarea.is_disabled, select.is_disabled").each(function(index){ // and remove them entirely $(this).remove(); }); return true; }); // now don't let anyone click into the fields // this will simulate the 'disabled' functionality $('.is_disabled').click(function() { $('.is_disabled').blur(); }); 

我想你可以写的CSS而不是继续使用JQuery。 我没有testing过。 但是如果你禁用一个textarea,它应该自动处理样式。 添加到你的样式表,让我知道….

 input[disabled][type='text'], textarea[disabled]{ color: rgb(0,0,0); background-color:Silver;} 

我也寻找一个简单的,无脚本的解决scheme。 以下在IE 8中为我工作。这个想法是使用背景透明度和filter来转换和着色文本。 这使得禁用的文本变得足够清晰,以使其可读。

 textarea[disabled], select[disabled], input[type='text'][disabled] { /*required*/ background-color:transparent; filter: light; /*fine tuning*/ font-weight:100; font-family: Tahoma; border: 1px solid; letter-spacing:1px; } 

select没有阴影,所以使文本很厚,以获得相似的字体重量效果。

 select[disabled] { font-weight:900; } 

Afaicr在HTML中看起来有点像<textarea disabled="disabled">对吗? 你可以在IE7中使用textarea[disabled="disabled"] (可能不适用于IE6)。

fredrikholmstrom的答案是最好的跨浏览器解决scheme。

input[禁用]和input[只读]工作在IE 7,8和9当你添加此行到HTML文件:

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

使用标签覆盖:

 <asp:Label ID="lblTxtHider" runat="server" Text="" CssClass="hidden" Enabled="false"></asp:Label> <asp:TextBox ID="TextBox1" runat="server" CssClass="frmItem" Visible="false" OnTextChanged="TextBox1_TextChanged"></asp:TextBox> 

然后在CSS中:

 .disabledColorChanger { position: absolute; font-family: Arial; font-size: 13px; margin-top: 3px; margin-left: 4px; } .disabledColorChanger[disabled] { display:none; } 

在设置或禁用代码时:

 private void SetEnabled(bool enabled) { lblTxtHider.Enabled = !enabled; TextBox1.Enabled = enabled; lblTxtHider.Text = TextBox1.Text; } 

而正确的代码检测即:

 <script> $(document).ready(function () { var isIE = /*@cc_on!@*/false || !!document.documentMode; if (isIE) { document.getElementById("<%=lblTxtHider.ClientID%>").className = "disabledColorChanger"; } }); </script> 

只需设置标签=input值。 为我工作。

你有两个select(因为IE 6/7不支持:禁用的CSSselect器)

  1. 使用jQuery(或您select的其他js-lib),并将类应用于所有禁用的input元素,例如:$(“input:disabled,textarea:disabled”)。addClass(“is-disabled”);
  2. 在服务器端手动添加“is-disabled”类,这当然是可行的,如果您事先知道哪些元素将被禁用,哪些不会。