Javascript 为什么我的函数不是函数?
我的查看页面中有以下内容:Javascript 为什么我的函数不是函数?,javascript,html,Javascript,Html,我的查看页面中有以下内容: <input type="checkbox" id="toggle_SITEID" name="@@toggle_SITEID" onclick="toggle_SITEID(this)" /> New <br /> 然后我点击复选框,“某物”不会运行。我在firebug控制台中检查错误消息是: 切换\u SITEID不是一个函数 那么为什么会这样呢?这个错误可能有两个原因: 您没有在HTML文件中引用脚本 函数不是在全局范围内声明的,而是
<input type="checkbox" id="toggle_SITEID" name="@@toggle_SITEID" onclick="toggle_SITEID(this)" /> New <br />
然后我点击复选框,“某物”不会运行。我在firebug控制台中检查错误消息是:
切换\u SITEID不是一个函数
那么为什么会这样呢?这个错误可能有两个原因:
- 您没有在HTML文件中引用脚本
- 函数不是在全局范围内声明的,而是在内部范围内声明的。
全局范围-
内窥镜- - 有一个元素的
与函数名相同(id
)。toggle\u SITEID
在Internet Explorer中,使用元素的
是id
的快捷方式。使用document.getElementById()
声明中断链接var
- 另一个可能出现的问题是,当您有一个内联处理程序试图使用干扰内联处理程序的唯一作用域链的全局变量时。当全球经济
- 与具有处理程序的元素上的任何属性同名,或
- 与
文档上的任何属性同名
作为变量对象注入作用域链,因此在访问全局变量时,这些对象上的任何属性都会产生干扰 例如,给定以下元素:文档
,我们可以成功调用全局click me
,除非我们执行了类似于foo()
的操作。由于document.foo=“bar”
作为变量对象注入范围链中,因此文档
现在会隐藏全局document.foo
元素本身也是如此。如果我们在调用全局函数之前将foo
属性添加到元素中,那么该属性将隐藏全局函数<代码>单击我foo
- 我突然想到一件事:
即使是匿名函数,也不能以分号结尾
试试这个:
toggle_SITEID = function (chk) {
alert("I work!");
};
正在进行演示:我的错误是ID与函数同名 将id更改为与单击时要调用的函数名不同的其他名称 改变
<input type="checkbox" id="toggle_SITEID" name="@@toggle_SITEID" onclick="toggle_SITEID(this)" /> New <br />
New
致:
New
您是否在HTML中包含javascript文件?它是否在正确的范围内?i、 e.toggle\u SITEID
是其他函数中的变量,而不是全局名称空间中的变量吗?请发布一个重现问题的帖子好吗?(确保将JavaScript位置也设置为“no wrap(head)”)如果元素具有与函数同名的属性,它将中断。这也适用于文档
元素。您的HTML不会显示任何具有确切名称的属性toggle\u SITEID
。是否有可能将属性添加到具有该名称的元素或文档中?@amnotiam。请在CW回答中详细说明(但不要告诉社区,否则他们会不高兴…)你的意思是什么,因为它在chrome中工作(但在IE中不工作)。问题是他没有关闭他的变量声明,因此函数从未实际设置为变量。我不能从他的例子中看出你如何知道函数的范围。也许没有它就可以工作,但我说js是错误的。因为将var设置为anon函数而不完成var的设置是没有意义的。但是你是对的,这两种方式都有效。但你还没有说明(至少对我来说)你如何知道他是如何设置他的范围的。你是根据错误猜的吗?@Anthony。这没有错,但不是最佳实践。无论如何,是的,这只是猜测,他的真正错误是由@am not I am发现的。所以我添加了所有的猜测,并制作了一个社区维基。你为什么要这样回答呢?@ThiefMaster。因为不是所有的答案(包括答案)都是我的,所以我不想得到学分。如果你愿意的话,你现在可以改进它。那个冲着你跳的人是错的。。。你没有测试它。你的小提琴没有分号的效果。。。如果您阅读ecmascript规范:您可以看到分号实际上是完全可选的(尽管像Douglas Crockford这样的人在您不使用分号时会生气)。是的,几乎我所有的函数都没有以分号结束,它仍然在工作这救了我的命
<input type="checkbox" id="toggle_SITEID" name="@@toggle_SITEID" onclick="toggle_SITEID(this)" /> New <br />
<input type="checkbox" id="toggle_SITEID" name="@@toggle_SITEID" onclick="toggle_SITE_ID(this)" /> New <br />