这段代码我看着别扭,但不知道怎么错了,请帮帮我。
<html>
<head>
<title> abc </title>
</head>
<body>
<input type = "text " onclick = "onclick(); " />
<script>
function onclick()
{
var i;
for(i=0;i <10;i++)
{
document.write(i);
}
}
</script>
</body>
</html>
一点击文本框就弹出一个对话框:“stack overflow at line 0”。我也知道这样的代码不太可能能正常执行,因为ie窗口不可能像windows窗口那样可以随时改变内容。但我不知道代码的毛病在哪儿,请高手给我讲讲。
------解决方案-------------------- <html>
<head>
<title> abc </title>
</head>
<body>
<input type = "text " onclick = "ClickMe(); " />
<script>
function ClickMe()//onclick --> ClickMe
{
var i;
for(i=0;i <10;i++)
{
document.write(i);
}
}
</script>
</body>
</html>
------解决方案--------------------老师在教你 "变量 "那章的时候,没有跟你说过 "有些单词是不能用作变量名的 "?
------解决方案--------------------onclick
是js关键字
请不要使用
------解决方案--------------------呵呵,LZ 的真逗,这代码你也敢写!
onclick 虽然不是保留字,但它是事件名,也不能乱用,
onclick = "onclick(); " ——的含义是 当点击发生时执行 onclick(); 函数,而 LZ 希望执行的是自定义的那个,但是 JS 解释器并未执行那个自定义的函数,而是执行了缺省函数 anonymous(),而 anonymous() 的函数体如下:
function anonymous() {
onclick();
}
即 onclick(); 事件拥有一个对缺省 anonymous() 函数的引用,而 onclick 又不能被同名函数所覆盖(否则事件机制就彻底报销了),因此结果就是“死循环”,栈溢出!
结论:事件名虽然不是保留字,但是也不可以用于变量名或函数名!!!否则后果自负,哈
先看看是怎么死掉的就执行以下代码,不怕死的上:
<html>
<head>
<title> abc </title>
</head>
<body>
<input type = "text " onclick = "alert(this.onclick);onclick(); " />
<script>
function onclick()
{
alert( "in ");
var i;
for(i=0;i <10;i++)
{
document.write(i);
}
}
</script>
</body>
</html>
------解决方案--------------------忘了把正确的贴上了,哈
<html>
<head>
<title> abc </title>
</head>
<body>
<input type = "text " onclick = "alert(this.onclick);clickMe(); " />
<script>
function clickMe()
{
alert( "in ");
var i;
for(i=0;i <10;i++)
{
document.write(i);
}
}
</script>
</body>
</html>
------解决方案--------------------受教了~
------解决方案--------------------受教了