2013-09-25 170 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將不存在,直到被執行的代碼行,但就是可以被輕鬆的工作。

您也可以考慮應用程序架構,其中這樣的全局變量共同給需要它們,或爲合適的訪問的數據存儲對象的屬性所有功能的封閉舉行。