本文出處原文鏈接 轉載請注明出處 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);
}
其實最好的習慣是:調試結束后直接刪除這句話!發布干凈的代碼!