液晶显示器对disabled的控件颜色显示过浅的研究

时间:2024-03-07 16:46:45

KeyWord:液晶显示器 颜色过浅,液晶显示器 看不清,液晶显示器 disabled控件,disabled控件颜色太浅,disabled控件颜色太淡,disabled控件看不清,disabled控件颜色过浅,disabled控件颜色过淡,液晶显示器和CRT显示器区别,控件颜色,appendChild,appendChild用法,appendChild的使用

 

1:问题现象

因为我用的是CRT显示器,因为CRT的颜色要必液晶显示器颜色要亮丽一些,所以导致我在CRT显示器上调整的样式表颜色,在液晶显示器下颜色普遍偏淡,这个的确是一点很值得注意的地方,毕竟现在液晶显示器已经占据了主流,以后可能对此要注意一些.如果仅仅是样式表的颜色设计问题倒也就算了,那只是我个人的问题.但是当所有的disabled控件在液晶显示器的WindowXP下显示都出现"几乎看不清"的时候,这个问题就稍微有点严重了.这是这种"几乎看不清",迫使我们不的不更深入的研究一下这个问题的解决方案.贴图一个,如果你是液晶显示器看看效果是不是糟糕到"几乎看不清".

截的图片稍微有点失真.呵呵.

 

2:问题分析:

这个没有什么好分析的,就是因为液晶显示器的显示不够亮丽的原因造成的.但是,我们并不能说顾客的显示器是液晶的,就不让顾客访问页面呀,所以这个问题还是需要解决的.

 

3:问题的技术调查:

这个问题早先一段时间测试部就已经提出来了,当时的结论是:disabled后的控件颜色是浏览器内置的,不能够被修改,这个问题很难解决.因为当时这个bug的等级还不是很高,就没有及时解决.后来顾客反馈了这个问题,我们就必须进一步的调查一下了.

 

4:解决方案

既然disabled后的控件颜色我们是不能修改的,那我们只能另想办法了.当时在分析代码的时候发现radioBox的代码有点特殊,所以我们采用一些技巧.让我们先来看看这段生产后稍微整理了一下的代码.

<span disabled="disabled">

<input id="ctl00_cphMain_radLicenceSpecialSendFlg_0" type="radio" name="ctl00$cphMain$radLicenceSpecialSendFlg" value="1" checked="checked" disabled="disabled" tabindex="-1" />

<label for="ctl00_cphMain_radLicenceSpecialSendFlg_0">該当</label>

</span>

<span disabled="disabled">

<input id="ctl00_cphMain_radLicenceSpecialSendFlg_1" type="radio" name="ctl00$cphMain$radLicenceSpecialSendFlg" value="0" disabled="disabled" tabindex="-1" />

<label for="ctl00_cphMain_radLicenceSpecialSendFlg_1"></label>

</span>

 

看到了吧,其实一个服务器端的"灰掉"radio控件,打到前他后是有三个部分组成的,一个input typeradio类型,一个label,用来显示radio的文本,还有一个sapn,其实真是这个spanlabel"灰掉".所以我们只要让这个spandisabled的属性改变一下就可以啦.问题是我们怎么找到这个东西呢?如果直接遍历所有disabled=truespan,可以会导致其他的一些问题(例如页面就有一个我们设置的span,它的disabled就是我们设置的true,但我们并不想动它.),所以我们采用遍历所有input,条件是type=radio,然后disabled=true,通过这两个条件,我们基本就能确实是我们要出力的对象了,然后通过这个inputfatherElement,我们就能确实我们要操作的span,然后讲它的disabled的属性设为flase.实现函数如下:

function DeeperColorForRadio(){

var InputTotal=document.all.tags("INPUT").length;

for(i=0;i<InputTotal;i++){

if(document.all.tags("INPUT")[i].type == "radio" && document.all.tags("INPUT")[i].disabled==true){

document.all.tags("INPUT")[i].parentElement.disabled=false;

}

}

}

通过观察代码,我们很容易的解决了radio的问题,剩下的列表框就稍微有点麻烦.

我们还是从分析代码开始:

<select name="ctl00$cphMain$ddlDeliveryType" id="Select1" disabled="disabled" tabindex="-1" class="txtPreview">

<option selected="selected" value="A">社内</option>

<option value="B">社外</option>

<option value="C">客先社内</option>

</select>

发现服务器端的列表框,生产的就是select这个东西.所以我们只要遍历所有的disabled顺序为trueselect控件就可以啦,好像很简单呀!但是就算我们找到了它又怎么用呢,因为disabled后的控件我们是不能改变它的颜色样式的.这个就是我所说的"稍微有点麻烦"的地方.好在有朱王伟(我们公司的高人呀!公司我最敬佩的人物之一)的提示."用一个label替换掉select用于预览时的显示"(虽然后来正是label不能*设置宽度,导致表格里面的列表框替换后表格会被"压扁",所以应该用div替换之.但是实现的思想却是正确的).实现函数如下:

function DeeperColorForSelect(){

//为了提高效率,先用变量存放一下.

var SelectTotal=document.all.tags("SELECT").length;

//遍历所有的Select,

for(i=0;i<SelectTotal;i++){

if(document.all.tags("SELECT")[i].disabled==true){

ChildrenTotal=document.all.tags("SELECT")[i].length;

//遍历列表框里面的所有option

for(ii=0;ii<ChildrenTotal;ii++){

if(document.all.tags("SELECT")[i].children[ii].selected==true)

{

//创建一个div

var oDIV=document.createElement("DIV");

//前面一个一个空格,是为了防止文字前缩.

oDIV.innerText = " " + document.all.tags("SELECT")[i].children[ii].text;

//div设置合适的宽度

oDIV.style.width = document.all.tags("SELECT")[i].style.width;

document.all.tags("SELECT")[i].parentElement.appendChild(oDIV);

document.all.tags("SELECT")[i].style.display ="none";               

}

}

}

}

}

 

然后将两个函数稍微合并一下,在你预览画面功能之前调用一下应该就可以解决问题.效果图如下: