YUI3在IE8下的几个兼容性问题
最近项目实施,IE11下正常的东西在IE8下出了几个问题,甚至其他浏览器都没有的问题,用户大多使用IE8,没办法,只好为IE8做修正
其中之一:
YUI3的datatable一显示引发IE8浏览器自动进入兼容性模式并刷新页面,在兼容性模式下,CSS很糟糕,而且datatable完全浮动着,显示很不成样子
查了半天,是如下一句话造成的:
sptable.set('columns', spcolumns.concat(eval(data.header)));
这个功能是当用户进行了选择时,要重置表列的内容但这个重置的过程不知道哪里CSS有问题,IE8不兼容
解决办法每当要重置表列时删除掉表重建好了
sptable.detachAll(); Y.one('#spectrumlistsection #spectrumtable').setHTML(''); sptable = new Y.DataTable({ columns: spcolumns.concat(eval(data.header)), scrollable: 'x', height: '500px', width: '100%', data: [] }).render('#spectrumlistsection #spectrumtable'); sptable.delegate('click', function(e) { var code = this.getRecord(e.target).get('code'); showPartDetail(code); }, 'a.partdetail', sptable);
首先将表上的代理全部清掉,然后把表区域置空,接着创建一个新的datatable,并重新添加代理
第二个问题就很无奈了,脚本里有IE8不支持的CSS选择器
var nodelist = bpdiv.one('.search-filter').all('input[type=radio]:checked');
这个应该是CSS3的写法,可惜IE8不支持,只好改成
var nodelist = bpdiv.one('.search-filter').all('input[type=radio]'); nodelist.each(function(k, v) { if (k.get('checked') && k.get('value') != '') { 。。。。。。 } });
第三个是浮动提示,当鼠标移动到信息上时出现tooltip,tooltip里的数据隐藏在信息的hint span里,如果没有则通过ajax去获取
var onMousemove = function(e) { if (tooltip.get('visible') === false) { Y.one('#tooltip').setStyle('opacity', '0'); tooltip.move([(e.pageX+ 10), (e.pageY + 20)]); } var node = e.currentTarget; var hintnode = node.one('.hint'); var code = node.one('.partcode').getHTML(); if (hintnode == null) { var configuration = { method: 'POST', sync: true, data: { code: code, method: 'gethint' }, on: { complete: function(o) { hintnode = Y.Node.create('<span class="hint hidden"></span>'); hintnode.setHTML(o.data.responseText); node.appendChild(hintnode); } } }; var io = new Y.IO({ emitFacade: true, bubbles: true }); io.send('Search.ashx', configuration); } if (hintnode.getHTML() == '') { return; } if (waitingToShow === false) { setTimeout(function() { Y.one('#tooltip').setStyle('opacity', '1'); tooltip.show(); }, 500); waitingToShow = true; tooltip.setStdModContent('body', hintnode.getHTML()); } }
tooltip的写法还是从yui官方demo里抄过来的,结果在IE11,firefox以及众多各种浏览器下都正常,偏偏IE8下除了第一排数据显示正常,第二排后面的都不正常
在F12里调试了一下,原来是pageX和pageY的问题,主要是pageY,第二排开始的数据pageY都老大老大的,导致tooltip不知道飞哪里去鸟
这个么,也就不解释了,直接把pageX和pageY改成clientX和clientY就解决了,两个有什么不同自己理解下就好了
最后一个是小问题,IE8不支持opacity......
把opacity: 0.5下再给IE8加个
filter: progid:DXImageTransform.Microsoft.Alpha(opacity=50);