2013-09-25 271 views
7

如何a_href = $(this).attr('href');值传递函数为全球a_href,使a_href="home"jQuery的使全局变量

+0

是啊,这非常期待权。 – Ryan

+0

它应该像你期望的那样工作。 – PSL

+0

唯一的问题是,如果'VAR a_href'是DOM准备好处理程序内...变量声明玉米粥在全球空间或使用'window.a_href = $(本).attr(“href”属性)' –

回答

22

您的代码看起来不错,除了可能性,如果变量声明是一个DOM读取处理器中,那么它不会是一个全局变量...这将是可变的封闭

jQuery(function(){ 
    //here it is a closure variable 
    var a_href; 
    $('sth a').on('click', function(e){ 
     a_href = $(this).attr('href'); 

      console.log(a_href); 
     //output is "home" 

     e.preventDefault(); 
    } 
}) 

为了使可变全球,一种解决方案是声明变量在全局范围

var a_href; 
jQuery(function(){ 
    $('sth a').on('click', function(e){ 
     a_href = $(this).attr('href'); 

      console.log(a_href); 
     //output is "home" 

     e.preventDefault(); 
    } 
}) 

另一个是给变量设置为窗口对象

window.a_href = $(this).attr('href') 

为什么控制台打印的属性undefined

您得到的输出为undefined,因为即使声明了变量,用一个值lized它,点击后a元到那时变量的值将undefined变量的值只设置。如果你不声明变量就会抛出一个ReferenceError

+0

谢谢很多,会打勾:-) – olo

+0

我知道这是旧的,但男人这帮了我。谢谢 –

0

设置变量的窗口:

window.a_href = a_href; 
1

您可以通过直接将其添加到全局对象避免全局变量的声明:

(function(global) { 

    ... 

    global.varName = someValue; 

    ... 

}(this)); 

这种方法的缺点是globa.varName将不存在,直到被执行的代码行,但就是可以被轻松的工作。

您也可以考虑应用程序架构,其中这样的全局变量共同给需要它们,或为合适的访问的数据存储对象的属性所有功能的封闭举行。