日期:2014-05-16 浏览次数:20363 次
首先对于IE6该死的问题不做讨论了,一句话“客户要用”就无需多讲了。
IE6的CSS兼容性主要是美工头痛的事,不做深入。
通常的CSS兼容IE的大杀器就是使用条件注释
?
<style type="text/css"> .ie6-down { display: none; } </style> <!--[if IE 6]> <style type="text/css"> .ie6-down { display:block; margin-left: -45px; margin-top: 15px; font-size: 14px; color: gray; } </style> <![endif]-->
?两个style标签,第一个定义的样式是让元素不可见,第二个定义的样式是对IE6生效在IE6下可见。
?
还是回到Javascript兼容性问题点的记录,先记一部分,全面遇到再加吧。
这些问题解决之后看起来都比较简单,但解决的过程注定十分痛苦,记录一下留个纪念。
?
?
1.iframe[name]
在IE6中动态创建iframe时,其name属性务必写在标签中,否则不生效。
?
var iframe = $("<iframe name='my_iframe' frameborder='0' style='width:100%; height:100%; border:0; display:block'/>")[0]; iframe.src = settings.href;
?只有这样写IE6才能够识别form/a的target='my_iframe'
如果你是按下面的写法创建的iframe,那么就悲剧了。
?
var iframe=$("<iframe>"); iframe.name='my_frame';?
2.checkbox/radio[checked]
在IE6动态创建checkbox/radio时,其checked属性务必写在标签中,否则不生效
?
var checked=""; if (elem.val() == "1") { checked='checked="checked"';//just because fuck ie6 } var targetElem = $('<label><input type="checkbox" name="param_value" '+checked+' value="1" />自动数据同步</label>');
?如果写法如下,那么在IE6上是悲剧的
?
?
var targetElem = $('<label><input type="checkbox" name="param_value" value="1" />自动数据同步</label>'); targetElem.find("input").attr('checked','checked');?
3.form[class]
?
在IE6/7中,如果form中有一个域的名字叫做className那么悲剧了,form.classXxx将无法正确执行。
?
原代码示例:
?
<form id="dataEditor1" action="Controller" service="ConfigService.updateAdapter" nextstep="close" class="DataEditor"> <div> <label> <span>账单类型:</span> <input type="text" name="billType" value="${ param.bill_type}" validates="{required:true,messages:{required:'此参数不允许为空!'}}" /> </label> </div> <div> <label> <span>适配器名称:</span> <input type="text" name="name" value="${ param.bill_name}" validates="{required:true,messages:{required:'此参数不允许为空!'}}" /> </label> </div> <div> <label> <span>适配器实现类:</span> <input type="text" name="className" value="${ param.adapter_class}" validates="{required:true,messages:{required:'此参数不允许为空!'}}" /> </label> </div> <input type="hidden" name="action_type" value="${ param.action_type}" /> <input type="submit" name="submit" value="提交" class="spq_input" disabled="disabled" /> <input type="reset" name="reset" value="重置" /> </form>?
注意“适配器实现类”的input,它的name="className"。
使用js取值
?
var form=$("form.DataEditor"); alert("forms:"+form.length);//结果为0 alert($("form")[0].className);//结果为[Object object]?
这个悲剧是因为IE中支持按照表单名和表单域名进行索引,例如dataEditor1.billType。幸好在IE8+已经修复此问题了。
?
?
4.待续
?
?
?
?
?