6

我的视图页面中有这个:

<input type="checkbox" id="toggle_SITEID" name="@@toggle_SITEID" onclick="toggle_SITEID(this)" /> New <br />

然后在我的js文件中我有这个:

toggle_SITEID = function (chk) {
    // something
}

然后我点击复选框,“某事”不会运行。我在 firebug 控制台中检查错误消息是:

toggle_SITEID 不是函数

那么为什么会这样呢?

4

3 回答 3

8

此错误可能有几个原因:

  • 您没有在 HTML 文件中引用脚本。

  • 该函数未在全局范围内声明,而是在内部范围内声明。
    全局范围 - WORKING DEMO
    内部范围 - NON WORKING DEMO

  • 有一个元素id与函数名(toggle_SITEID)相同。
    在 Internet Explorer 中,使用元素iddocument.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>

于 2012-04-18T05:48:29.530 回答
2

对我来说,错误是 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 />
于 2018-08-18T00:09:14.937 回答
-2

我突然想到一件事:

即使它是一个匿名函数,也不能以分号结尾。

试试这个:

toggle_SITEID = function (chk) {
    alert("I work!");
};

工作演示:http: //jsfiddle.net/crazytonyi/cDNcu/

于 2012-04-18T05:50:00.567 回答