2010-10-12 91 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(){ 

});