2012-09-07 12 views
2

HTML:一個函數未捕獲的ReferenceError在一個onload函數定義

<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/

+0

http://jsfiddle.net/LXSZj/6/ – fcalderan

回答

9

你的jsfiddle偏好是 設置爲「onload」,所以JavaScript窗格的內容被封裝在一個函數中。

該示波器ccdd不存在,爲jsfiddle示例創建了一個額外的問題)並停止它成爲全局函數。

由於您試圖從內部事件屬性調用它,因此您處於不同的範圍內,無法訪問它。

作爲一種快速解決方案,您可以將首選項更改爲'nowrap',但這不會使代碼符合最佳實踐。

建議避免固有事件屬性,以支持binding event handlers with Javascript。 YUI3提供了一個event module,jQuery提供了on method來幫助這個(其他庫可用)。另見:Unobtrusive JavaScript。例如,see this js fiddle

+2

+1。另外,小提琴調用'dd'。 Yup! –

+0

'無包裝'很好的工作 – Vishal

+0

很好的解釋,所以我想接受這個答案,你可以添加jsfiddle鏈接。我有答案。但是,如果你添加它將是完美的。 –

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

變量和函數似乎在他們的範圍...

2

確實如此,你只是在你的提琴兩個錯誤:

  • 你叫dd代替cc
  • 您將整個javascript包裝在一個onload函數中(請參見左側的下拉列表),並且變量和函數是本地的。它移動到全球範圍內,或cc功能分配給全局對象:window.cc = function(){…};

Corrected version

相關問題