为什么这个JS没有在IE中正确执行?
此作品在全部浏览器,但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
}
,因为这条线在IE中是错误的,阻止其他代码运行。
const COOKIE_NAME = "cookiename";
变更const
变成var
。
或:
try {
const COOKIE_NAME = "cookiename";
} catch (e) {
var COOKIE_NAME = "cookiename";
}
从[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
将其更改为var works,但try ... catch会导致原始错误。谢谢! – Supuhstar 2013-03-27 00:45:56
其IE浏览器您使用? – intelis 2013-03-27 00:27:49
您可能在函数存在之前调用该函数。 – Ryoku 2013-03-27 00:29:08
请作出[jsfiddle](http://jsfiddle.net/)请 – Adidi 2013-03-27 00:30:15