2017-05-07 130 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); 
});