我只是花了很长时间才弄清楚我不应该使用clear()作为Javascript中函数的名称:
<head>
<script type="text/javascript" src="Array.js"></script>
</head>
<body>
Hello!!!!<br>
<button type="button" onClick="clear()" id="ppp">Shoo!</button><br>
<button type="button" onClick="add()" id="add">Add a few elements</button><br>
<button type="button" onClick="check()" id="check">Check the array</button><br>
<p id="results">Results will appear here.</p>
<script type="text/javascript">
initialize();
</script>
</body>
这是 Array.js:
var results;
function initialize(){
results = document.getElementById("results");
}
function add() {
results.firstChild.data="add";
}
function clear() {
results.firstChild.data = "Hello?";
}
function check() {
results.firstChild.data = "check";
}
症状:单击“添加”和“检查”按钮给出了我期望的结果,但单击“清除”按钮没有任何反应。
如果我重命名clear() to 清除xyz(),效果很好。
我的问题:
- “clear”是保留词吗?我在列表中没有看到它:https://developer.mozilla.org/en/JavaScript/Reference/Reserved_Words
- 我应该使用调试技巧来解决这种问题
未来的事情?我花了很长时间(我是菜鸟!)
弄清楚函数的名称是我的问题。
非常感谢。
编辑:我使用的是 Firefox 6.0,我添加了一个换行符来显示 Array.js 的开始位置。
As the others said, clear
is not a reserved keyword. It seems that the called function is document.clear [MDN]. Invoking
console.log(clear === document.clear);
事件处理程序内部返回true
.
DEMO
所以它看起来,document
位于事件处理程序的作用域链中......现在的问题是为什么。
JavaScript:权威指南 says:
在作为 HTML 属性的事件处理程序中,Document 对象位于 Window 对象之前的作用域链中 (...)
由于您的方法是全局的,这意味着它是window
对象,在作用域链中找不到它,因为document.clear
在作用域链中较早出现。
我还没有找到这方面的任何规范。该指南还说人们不应该依赖它,所以我认为这不是官方的。
如果表单中有表单元素,那么即使是相应的form
元素将位于作用域链中(但不确定这是否适用于所有浏览器)。这是造成混乱的另一个原因。
有两种(非唯一)方法可以避免这种情况:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)