2013-03-27 90 views
1

此作品在全部浏览器,但IE浏览器。我已检查的代码,我知道 IE浏览器可以正常读取,所以你不会不知所措。 为什么IE说我的功能不存在?为什么这个JS没有在IE中正确执行?

错误:

SCRIPT5009: 'switchStyles' is undefined 
test.php, line 180 character 21 

HTML:

025: <SCRIPT TYPE="text/javascript" SRC="/_js/styleSwitch2.js"><!-- Style Switching Scripts --></SCRIPT> 
... 
180: <SELECT ONCHANGE="return switchStyles(this);"> 
181:  <OPTION VALUE="/_css/default.css">Select a style!</OPTION> 
182:  <OPTGROUP LABEL="Skin Group 1"> 
183:   <OPTION VALUE="/_css/alt1-1.css">Alt 1.1</OPTION> 
184:   <OPTION VALUE="/_css/alt1-2.css">Alt 1.2</OPTION> 
185:   <OPTION VALUE="/_css/alt1-3.css">Alt 1.3</OPTION> 
186:  </OPTGROUP> 
187:  <OPTGROUP LABEL="Skin Group 1"> 
188:   <OPTION VALUE="/_css/alt2-1.css">Alt 2.1</OPTION> 
189:   <OPTION VALUE="/_css/alt2-2.css">Alt 2.2</OPTION> 
190:  </OPTGROUP> 
191: </SELECT> 

JS:

var sheetElement = document.getElementById("_switchSheet"); 
var backupSheetElement = document.getElementById("_switchSheetBackup"); 

sheetElement.disabled = false; 
if (backupSheetElement) 
    backupSheetElement.disabled = false; 
else 
    //warn 

var useCookies = true; 
const COOKIE_NAME = "cookiename"; 


function switchStyles(selectElement) 
{ 
    if (sheetElement == null && (sheetElement = document.getElementById("_switchSheet")) == null) 
     //fail 
    switchStyleTo(selectElement.value); 
} 

function switchStyleTo(newSheet) 
{ 
    sheetElement.href = (newSheet == backupSheetElement.href) ? null : newSheet; 

    setCookie(newSheet); 
} 



function setUseCookies(shouldUseCookies) 
{ 
    useCookies = shouldUseCookies; 
} 

function setCookie(cookieContent) 
{ 
    //works 
} 

function getCookie() 
{ 
    //works 
} 

function setStyleFromCookie() 
{ 
    var cookie = getCookie(); 
    if (cookie.length > 0) 
     switchStyleTo(cookie); 
    else 
     //fail 
} 
+0

其IE浏览器您使用? – intelis 2013-03-27 00:27:49

+0

您可能在函数存在之前调用该函数。 – Ryoku 2013-03-27 00:29:08

+0

请作出[jsfiddle](http://jsfiddle.net/)请 – Adidi 2013-03-27 00:30:15

回答

5

,因为这条线在IE中是错误的,阻止其他代码运行。

const COOKIE_NAME = "cookiename"; 

变更const变成var

或:

try { 
    const COOKIE_NAME = "cookiename"; 
} catch (e) { 
    var COOKIE_NAME = "cookiename"; 
} 
+3

从[MDN](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/const):const的当前实现是Mozilla特定的扩展,不是ECMAScript 5的一部分。它在Firefox和Chrome(V8)中受支持。从Safari 5.1.7和Opera 12.00开始,如果您在这些浏览器中使用const定义变量,您仍然可以稍后更改其值。它在Internet Explorer 6-9或Internet Explorer 10的预览中不受支持。当前,const关键字在函数作用域中声明常量(如使用var声明的变量)。 – sh0ber 2013-03-27 00:37:49

+0

将其更改为var works,但try ... catch会导致原始错误。谢谢! – Supuhstar 2013-03-27 00:45:56