2010-10-12 89 views
2

我們有三個JS文件:JavaScript變量未定義錯誤?

<script type="text/javascript" src="js/pm.init.js"></script> 
<script type="text/javascript" src="js/pm.util.func.js"></script> 
<script type="text/javascript" src="js/pm.nav.js"></script> 

在init.js我們:

$(function(){ 
    var dirty = false; 
}) 

在util.func.js我們:

function dirtyCheck(actionFunction) { 
    if (dirty == false) { 
     actionFunction(); 
     return; 
    } 
    ... 

而且在nav.js我們有:

$(function(){ 
    $('#btn-nav-refresh').click(function() { 
     dirtyCheck(function() { doRefresh(); }); 
    }); 
    ... 

現在當btn-nav-refresh函數在用戶點擊按鈕後觸發,我們得到一個dirty is not defined錯誤。爲什麼是這樣??

+0

只需在'dirty = false'之前刪除'var'即可。 – casablanca 2010-10-12 19:33:26

回答

5

我覺得自己很髒告訴你如何讓你的「髒」變到一個骯髒的全局變量,但它會是這樣的:

$(function(){ 
    window.dirty = false; 
}) 

然而,你應該找到一個更好的方法來做到這一點。這裏有一個想法:

$(function() { 
    $('body').data('dirty', false); 
}); 

然後:

// ... 
if (${'body').data('dirty')) takeBath(); 
2

在init.js中,您不能只將var dirty = false;作爲全局變量,而不是在函數定義中?

2

只有在關閉時才知道變量dirty。這就是爲什麼。

$(function(){ 
    var dirty = false; 
}); 
alert(dirty); // Undefined (same file, just one line after. 

它是封閉的主要特徵......

2

正如其他人指出,dirty超出範圍,因爲它是由您的文檔準備功能封閉。更改您的聲明是這樣的:

var dirty = false; 
$(function(){ 

});