2017-05-07 4 views
-2

jQueryのクリック機能で定義されている変数を使用できないようです。私はグローバル変数とローカル変数の違いを知っていますが、関数の外部に変数を作成することは役に立たないようです。定義された関数の外にある変数にアクセスする方法は?

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

私が考えていない単純な解決策がいくつかあります。

+1

それはクリックイベントに設定されていますので、あなたはクリックイベントをトリガするまでまあ、それは価値がありません... –

+0

あなたは '別の関数/ハンドラ内console.log'を使用していますか?今あなたがやっている方法は、クリックハンドラがトリガされたときに 'console.log'が実行されないことを意味します。 – Bobface

+0

それは単に 'undefined'を印刷します –

答えて

0

JSで唯一の2値のスコープがあります:機能と値は.clickコールバックの内側にあり、後にのみ存在しますがクリックされたことを意味グローバル

が。 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 - 事実上のブロック代替として何年にもわたって使用されている理由はほとんどありません... –

0

をクリックすると、関数クリックのみが呼び出されます考えていることです。したがって、値は "#search"をクリックしたときにのみ割り当てられます。したがって、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); 
}); 
関連する問題