本文出处原文链接 转载请注明出处 http://www.cnblogs.com/havedream/p/4519538.html
问题来源:最近在学习easyui,观看的视频教程是孙宇的《EASYUI入门视频教程》 (点我下载),里面提到了console.info()这种方法,今天恰好遇到一位同事写的程序出现了不兼容IE的问题,或者说不兼容IE9及其以下版本浏览器,但是在google和火狐中运行良好,代码如下:
1 onBeforeLoad: function (row, param) { 2 if (row) { 3 console.info(row.cenCi); 4 if(row.cenCi==0){ 5 $(this).treegrid('options').url = *************************************; 6 }else if(row.cenCi==1){ 7 if(row.isInject){ 8 // alert("Inject"); 9 $(this).treegrid('options').url = *********************************; 10 }else{ 11 // alert("CITY-SRM"); 12 $(this).treegrid('options').url = ***********************************; 13 } 14 15 } 16 17 } else{ 18 $(this).treegrid('options').url = ***************************; 19 } 20 }
这是treeGrid的一个方法,点击之后加载某一行的子节点,但是就是这一部分代码,在IE9及以下版本出现问题。
问题描述:每次在IE9中打开页面,点击节点,发现没反应,然后F12,控制台调试,再次点击,问题消失了。。。。再次点击,发现怎么点击能打开,关闭控制台也没问题,但是每次重新打开浏览器就会有描述的问题。
解决方法:最开始我以为是onBeforeLoad的问题,这个方法在不同浏览器中的支持也是不一样的,不过后来发现即使我修改其他的方法,结果还是一样的,然后就开始怀疑关于console了,其实孙宇的课程中明确说了,console.info()在IE是会出错的,但是百度之后,发现自从IE8之后IE就已经支持console这种方法了,具体用法参见这里, 但是为什么孙宇老师说IE出错呢?仅仅是指的IE8之前的版本吗,我就仔细看了一下MSDN window.console具体的解释,其中有一句这样的话,
看到这里才恍然大悟,原来console.info()是需要打开一次控制台才能支持的,或者说在IE当中是不应该直接写console.info()的。
最终的代码应该是这样的
if (window.console){
console.info(row.cenCi);
}
其实最好的习惯是:调试结束后直接删除这句话!发布干净的代码!