我在浏览页面中有这个:
<input type="checkbox" id="toggle_SITEID" name="@@toggle_SITEID" onclick="toggle_SITEID(this)" /> New <br />
然后在我的js文件中我有这个:
toggle_SITEID = function (chk) {
// something
}
然后我点击复选框,“某事”将无法运行。我检查firebug控制台的错误信息是:
toggle_SITEID不是函数
那为什么呢?
答案 0 :(得分:7)
此错误可能有几个原因:
您没有在HTML文件中引用该脚本。
该函数未在全局范围内声明,而是在内部范围内声明
全球范围 - WORKING DEMO
内部范围 - NON WORKING DEMO
有一个元素的id
与函数名称(toggle_SITEID
)相同。
在Internet Explorer中,使用元素id
是document.getElementById()
的快捷方式。使用var
声明中断链接。
可能出现的另一个问题是,当您有一个内联处理程序试图使用干扰内联处理程序的唯一作用域链的全局变量时。这种情况发生在全球......
document
由于内联处理程序的作用域链具有元素本身以及作为变量对象注入作用域链的document
,因此访问全局变量时这些对象上的任何属性都会发生干扰。
例如,给定此元素:<a onclick="foo();">click me</a>
,我们可以成功调用全局foo()
,除非我们已完成document.foo = "bar"
之类的操作。由于document
作为范围链中的变量对象注入,document.foo
现在会影响全局foo
。
与元素本身相同。如果我们在调用全局函数之前将foo
属性添加到元素,那么该属性将影响全局。 <a onclick="this.foo = 'bar'; foo();">click me</a>
答案 1 :(得分:1)
对我来说,错误是ID与函数同名。
将id更改为与您要在单击时调用的函数名称不同的其他名称。
更改
<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 />
答案 2 :(得分:-2)
有一件事突然袭来我:
你不要用分号结束它,即使它是一个匿名函数。
试试这个:
toggle_SITEID = function (chk) {
alert("I work!");
};