2017-05-07 44 views
-2

我似乎無法使用jQuery點擊函數中定義的變量。我知道全局變量和局部變量之間的區別,但在函數之外創建變量似乎沒有幫助。如何訪問定義函數之外的變量?

var $genre; 
$('#search').click(function() { 
    $genre = $(this).attr('value'); 
}); 
console.log($genre); 

必須有一些簡單的解決方案,我只是沒有想到。

+1

好,因爲它是在一個點擊事件被設置,它不會,直到你... –

+0

是否使用'內的另一個功能/處理器console.log'觸發click事件有一個值?因爲你現在這樣做的意思是''''''''''''''''''''當點擊處理程序被觸發時' – Bobface

+0

它只會打印'undefined' –

回答

0

只有2 JS值範圍:功能和全球

意思就是說值是。點擊回調內,將只存在被點擊之後。 Undefined實際上是JS中的一個類型,意味着該變量存在但尚未賦值。

我懷疑是你認爲的代碼將同步執行,但是當...點擊

+0

是的,記錄變量UNTIL被點擊...你會看到值 –

+0

「JS中只有2個值範圍:函數和全局」,錯誤。還有一個塊範圍。 https://gist.github.com/StephanBijzitter/5dc3d2b0dd8ce959727b6184d8278875 –

+0

Noup,let關鍵字可以解決JS中從未有過塊範圍這一事實。它也僅在EC6中實施。 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/let - 很多原因IIFE在那裏用作事實上的塊替代多年...... –

0

要指定click事件的「價值」功能點擊纔會被調用。因此,只有當您點擊「#搜索」時纔會分配該值。所以console.log語句不會有任何價值。

請嘗試此操作。

var $genre; 
$('#search').click(function() { 
    $genre = $(this).attr('value'); 
    console.log($genre); 
}); 
0
  • 的代碼實際上是在幫你想對付的變量,但你是不是登錄到控制檯的功能中到底是什麼。
  • 我注意到的一件事是,您還使用$(this).attr('value')訪問「value」屬性。如果您試圖獲取我認爲是最初意圖的輸入值,則請輸入Jquery has a built in function to get the value of an input.

使我提到的這兩個更改的代碼如下所示!

var $genre; 

$('#search').click(function() { 
    //sets the variable to the value of the input 
    $genre = $(this).val(); 

    //prints the variable to the console everytime that the element is clicked 
    console.log($genre); 
});