获取 SCRIPT5009:'id' 在 Internet Explore IE 11 中未定义
Getting SCRIPT5009: 'id' is undefined in Internet Explore IE 11
我有一个非常简单的脚本 (setUser),它在单击 button.This 脚本时调用,在 chrome 中运行良好,但在 IE 11 中我收到控制台错误。
另一个奇怪的事情是,只有当开发工具 open.It 如果 devtool 未打开时工作正常,我才会收到该错误。
错误是:-
SCRIPT5009:'id' 未定义
<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript">
function setUser(eventType){
console.log(eventType);
}
</script>
</head>
<body>
<button id="vish" onclick="setUser(id)" style="height:40px;width:200px">Click Me</button>
</body>
</html>
对此的简单解决方法是声明一个
变量标识;在 script.But 下方,我需要正确的记录原因,为什么这在 ie11 中不起作用,但在 chrome.And 中同样有效是比我尝试的更好的解决方案
解决方法:- 通过在顶部添加 var id
<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript">
var id;
function setUser(eventType){
console.log(eventType);
}
</script>
</head>
<body>
<button id="vish" onclick="setUser(id)" style="height:40px;width:200px">Click Me</button>
</body>
</html>
预计:-
当开发工具在 ie11 中打开时,当我们单击按钮时,我们应该将控制台日志显示为 "vish"
实际结果:-
SCRIPT5009:'id' 是未定义的 js 错误
id
只是未定义,如错误消息所述。如果你声明它,错误就消失了,但它不会像你预期的那样表现。如果您声明它,它会以未定义的值存在。你可能想要
onclick="setUser(this.id)"
this.id
表示按钮上下文,而只是 id
试图在全局上下文中找到它。如果您的错误,id
未 声明 ,而
var id; // or var id=undefined;
声明它,并保留它未定义,所以浏览器至少知道它是一个变量。说 id 未定义 Explorer 表示它未声明。
我相信原因是浏览器搜索变量 和 命名元素(通过 name 或 id 属性引用;这不是标准的,但浏览器这样做),这实际上在全局上下文中不存在并通过引用查找,Explorer 显然无法处理这种情况。如果它声明为 var,javascript 知道它不是命名元素引用。
下面的示例显示了 non-standard 行为:它应该以错误结束 test is not defined (实际上没有),但是浏览器说 你好.
<input id="test" value="hello">
<script>
alert(test.value);
</script>
使用 onclick="setUser(this.id)"
应该可以。
但是,更简洁的解决方法是在 JavaScript 中完成所有 onclick
处理:
onload = function() {
var buttons = document.getElementsByTagName("button");
for(var i = 0; i < buttons.length; i++) {
buttons[i].onclick = function() {
console.log(this.id);
}
}
}
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<button id="vish" style="height:40px;width:200px">Click Me</button>
<button id="vish2" style="height:40px;width:200px">Click Me 2</button>
</body>
</html>
它在 IE11 中不起作用的原因是因为您没有在引发错误的代码块中为 HTML 文档指定文档类型。
如果我将 <!DOCTYPE html>
添加到 HTML 的开头,就像您展示的解决方法一样;它在 IE11 中也适用于我,无需添加 var id;
我不知道确切的原因,但如果没有文档类型,IE 将 运行 页面以怪异模式显示。当浏览器试图将 onclick="setUser(id)"
解析为有效的 JS 代码时,这似乎搞乱了函数范围的确定。
如果文档类型正确,则不会发生这种情况,因此页面可以 运行 处于正确的模式。
如果浏览器 HTML 引擎在使用前不必将 HTML 字符串 setUser(id)
解析为有效的 JS 代码,这也不会发生。因此,这不再是一个常见问题,因为现在的标准是不在 HTML 标签上使用内联事件处理程序属性。
因此,尽可能使用 javascript 进行显式事件绑定,而不是 运行 出现这样的问题,在这种情况下,完全不相关的部分 doctype 会扰乱您的代码。
我有一个非常简单的脚本 (setUser),它在单击 button.This 脚本时调用,在 chrome 中运行良好,但在 IE 11 中我收到控制台错误。 另一个奇怪的事情是,只有当开发工具 open.It 如果 devtool 未打开时工作正常,我才会收到该错误。
错误是:- SCRIPT5009:'id' 未定义
<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript">
function setUser(eventType){
console.log(eventType);
}
</script>
</head>
<body>
<button id="vish" onclick="setUser(id)" style="height:40px;width:200px">Click Me</button>
</body>
</html>
对此的简单解决方法是声明一个 变量标识;在 script.But 下方,我需要正确的记录原因,为什么这在 ie11 中不起作用,但在 chrome.And 中同样有效是比我尝试的更好的解决方案
解决方法:- 通过在顶部添加 var id
<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript">
var id;
function setUser(eventType){
console.log(eventType);
}
</script>
</head>
<body>
<button id="vish" onclick="setUser(id)" style="height:40px;width:200px">Click Me</button>
</body>
</html>
预计:- 当开发工具在 ie11 中打开时,当我们单击按钮时,我们应该将控制台日志显示为 "vish"
实际结果:- SCRIPT5009:'id' 是未定义的 js 错误
id
只是未定义,如错误消息所述。如果你声明它,错误就消失了,但它不会像你预期的那样表现。如果您声明它,它会以未定义的值存在。你可能想要
onclick="setUser(this.id)"
this.id
表示按钮上下文,而只是 id
试图在全局上下文中找到它。如果您的错误,id
未 声明 ,而
var id; // or var id=undefined;
声明它,并保留它未定义,所以浏览器至少知道它是一个变量。说 id 未定义 Explorer 表示它未声明。
我相信原因是浏览器搜索变量 和 命名元素(通过 name 或 id 属性引用;这不是标准的,但浏览器这样做),这实际上在全局上下文中不存在并通过引用查找,Explorer 显然无法处理这种情况。如果它声明为 var,javascript 知道它不是命名元素引用。
下面的示例显示了 non-standard 行为:它应该以错误结束 test is not defined (实际上没有),但是浏览器说 你好.
<input id="test" value="hello">
<script>
alert(test.value);
</script>
使用 onclick="setUser(this.id)"
应该可以。
但是,更简洁的解决方法是在 JavaScript 中完成所有 onclick
处理:
onload = function() {
var buttons = document.getElementsByTagName("button");
for(var i = 0; i < buttons.length; i++) {
buttons[i].onclick = function() {
console.log(this.id);
}
}
}
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<button id="vish" style="height:40px;width:200px">Click Me</button>
<button id="vish2" style="height:40px;width:200px">Click Me 2</button>
</body>
</html>
它在 IE11 中不起作用的原因是因为您没有在引发错误的代码块中为 HTML 文档指定文档类型。
如果我将 <!DOCTYPE html>
添加到 HTML 的开头,就像您展示的解决方法一样;它在 IE11 中也适用于我,无需添加 var id;
我不知道确切的原因,但如果没有文档类型,IE 将 运行 页面以怪异模式显示。当浏览器试图将 onclick="setUser(id)"
解析为有效的 JS 代码时,这似乎搞乱了函数范围的确定。
如果文档类型正确,则不会发生这种情况,因此页面可以 运行 处于正确的模式。
如果浏览器 HTML 引擎在使用前不必将 HTML 字符串 setUser(id)
解析为有效的 JS 代码,这也不会发生。因此,这不再是一个常见问题,因为现在的标准是不在 HTML 标签上使用内联事件处理程序属性。
因此,尽可能使用 javascript 进行显式事件绑定,而不是 运行 出现这样的问题,在这种情况下,完全不相关的部分 doctype 会扰乱您的代码。