日期:2014-05-16  浏览次数:20373 次

这段代码我看着别扭,但不知道怎么错了,请帮帮我。
<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>
------解决方案--------------------
受教了~
------解决方案--------------------
受教了