为什么我的功能不是功能?

Mr.*_*ous 5 html javascript

我在我的视图页面中有这个:

<input type="checkbox" id="toggle_SITEID" name="@@toggle_SITEID" onclick="toggle_SITEID(this)" /> New <br />
Run Code Online (Sandbox Code Playgroud)

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

toggle_SITEID = function (chk) {
    // something
}
Run Code Online (Sandbox Code Playgroud)

然后我点击复选框,"某事"将无法运行.我检查firebug控制台的错误信息是:

toggle_SITEID不是一个函数

那为什么呢?

gdo*_*ica 7

这个错误可能有几个原因:

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

  • 该函数未在全局范围内声明,而是在内部范围中声明.
    全球 范围 - 工作演示
    内部范围 - 非工作演示

  • 有一个元素id与函数name(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>