onload函数中定义的函数的未捕获的ReferenceError

时间:2012-09-07 12:26:52

标签: javascript

HTML:

<div id="myID" onclick="cc(this.id)">Click Here</div>​

JavaScript的:

var timer;
var firing = false;
var begen = function(id) {
    alert('tek');
};

var popupAc = function(id) {
    alert('çift');
};

function cc(id) {
    if (firing) {
        popupAc(id);
        clearTimeout(timer);
        firing = false;
        return;
    }
    firing = true;
    timer = setTimeout(function() {
        //begen(id);
        clearTimeout(timer);
        firing = false;
    }, 250);
}

错误:

Uncaught ReferenceError: cc is not defined 

示例:http://jsfiddle.net/LXSZj/3/

3 个答案:

答案 0 :(得分:9)

您的JSFiddle首选项设置为“onload”,因此JavaScript窗格的内容包含在一个函数中。

这个范围ccdd不存在,为jsfiddle示例创建了一个额外的问题)到该函数并阻止它成为全局函数。

由于您尝试从内部事件属性调用它,因此您处于不同的范围内,无法访问它。

作为快速修复,您可以将首选项更改为“nowrap”,但这不会使代码符合最佳实践。

建议避免使用binding event handlers with Javascript的内在事件属性。 YUI3提供event module,jQuery提供on method来帮助解决此问题(其他库可用)。另见:Unobtrusive JavaScript

例如,see this js fiddle

答案 1 :(得分:2)

确实如此,你的小提琴中只有两个错误:

  • 您致电dd而非cc
  • 您将整个javascript包装在onload-function中(请参阅左侧的下拉列表),变量和函数是本地的。将其移至全局范围,或将cc函数分配给全局对象:window.cc = function(){…};

Corrected version

答案 2 :(得分:1)

window.cc = function(id) { ...

变量和函数似乎都在其范围内......