2011-07-08 209 views
1

我有一个变量和两个函数。变量由两者使用。第一个函数是在每次被它使用时改变变量值(全局)。这是我想要的,但它不适合我。Javascript中的全局和局部变量

x = 1; 

function f1() 
{ 
    x = x + 1; 
    // use x 
} 

function f2() 
{ 
    // use x 
} 

我读过其他线程,但x总是1,这是非常令人沮丧的:

加入:实际代码

<script type="text/javascript"> 

function S4() { 
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1); 
} 

function guid() { 
return (S4() + S4() + ";" + S4() + ";" + S4() + ";" + S4() + ";" + S4() + S4() + S4()); 
} 

P = ''; 

function Save() { 
P = guid(); 
$('#btnBrowse').uploadifyUpload(); 
} 

$(document).ready(function() { 


      $('#txtText').elastic(); 

      $('#btnBrowse').uploadify({ 
       'uploader': '../uploadify.swf', 
       'script': '../uploadify.ashx', 
       'cancelImg': '/uploadify/cancel.png', 
       'folder': '../images/Albums/', 
       'multi': true, 
       'fileDesc': 'Web Image Files (.JPG, .GIF, .PNG)', 
       'fileExt': '*.jpg;*.gif;*.png', 
       'scriptData': { 'Album_ID': P }, 
       'buttonText': 'Upload Images' 
      }); 

}); 

</script> 

所以变量是P上。它由jquery函数(uploadify)使用。每次我执行 保存函数我希望我得到一个变量P的新值。但总是一样的?

+4

请向我们显示您的_actual_代码。 – SLaks

+2

您发布的代码应该可以工作。显示一个不起作用的用法示例(以及它如何工作)。 – delnan

+1

你发布的代码没有问题 –

回答

1

问题是当您执行代码时时间。 uplodify选项设置为页面加载(其中包括在页面加载时传递P),并且由于P是一个字符串,因此稍后(通过save())更改P不会更改您传递的值。

您可以通过传递对象的引用作为选项来解决此问题,而不是字符串编辑:没有工作。

该插件提供了一个uploadifySettings[docs]方法来更改uploadify实例的设置。使用它来更新scriptData设置:

function Save() { 
    $('#btnBrowse').uploadifySettings('scriptData', {'Album_ID' : guid()}, true); 
    $('#btnBrowse').uploadifyUpload(); 
} 
+0

Felix,我在修改代码后试图上传图片,但是错误显示Album_ID为空。 – Roobah

+0

@HTB:请看看我的更新。 –

+0

yeeeeeeees :)。最后它工作。我心情很糟糕。非常感谢Felix。对此,我真的非常感激 – Roobah

1

也许这拨弄可以帮助你了解全球范围内更好一点:http://jsfiddle.net/XFx27/1/

var x = 0; 

function add1() 
{ 
x = x + 1; 
} 

function show() 
{ 
    alert(x); 
} 

add1(); 
show(); //alerts 1 
add1(); 
show(); //alerts 2 

你缺少括号()后,你的函数funcname函数()

0
x = 1; 

function f1() 
{ 
    x = x + 1; 
    // use x 
} 

function f2() 
{ 
    // use x 
} 

// x is 1 

f1(); 

// x is 2 

f2(); 
0

首先,F1功能应是:

function f1(){ 
    x = x + 1; 
    // use x 
} 

var x; 

function f1(){ 
    x = x + 1; 
    console.log(x); 
} 

function f2(){ 
    console.log(x); 
} 

f1(); // 2 
f2(); // 2 

我试着在Chrome控制台中的代码,我认为它真的有效。

+0

第二个函数是jquery函数 – Roobah

+0

你可以尝试在prop中设置x的值,并在jQuery中读取它。 – Lynn