2016-05-08 19 views
0

"clickListener"関数を実行した後、変数の値を "クリック"する方法を教えてください。これは間違いなく「クリックされた」変数のスコープに関する問題です。addEventListenerの変数値を取得する

var clicked = 'no'; 
focus(); 
listener = addEventListener('blur', clickListener); 
function clickListener(){ 
    if(document.activeElement == document.getElementById('someIframe')){ 
     clicked = 'yes'; 
     console.log(clicked); 
    } 
}; 

私はこれを実行するたびに、コンソールログ「はい」が、クリックが発生した後、私は、変数をチェックするとクリックした「outterは」いいえ、まだです。ここで


は私の問題のJSFiddleです:DIVの https://jsfiddle.net/6c3nbpk5/4/

  1. オープンコンソール
  2. 注意状態 "メッセージ"( 'クリックされていない')
  3. クリックして、それのiframe内
  4. コンソールに「Divメッセージ:クリック済み」と表示されることをご確認ください。
  5. コンソールによって確認されたクリックに更新する必要があります。
  6. 注意Divの "message"はまだ表示されません。

クリックすると更新するにはdivMessageが必要です。しかし、これはすべて複数のiframeを追跡する関数内にあり、変数をウィンドウに追加することはできません。

+0

「クリック」リスナーは、クリックイベントにバインドされていません。しかし、とにかく、イベント後に変数をチェックするにはどうすればいいですか? – nnnnnn

+0

'clicked'を' window.clicked'で置き換えてみてください。 –

+0

これはiframeのクリックをチェックしているからです。クリックリスナーをiframeに割り当てることはできません。代わりに、フォーカスの最後の要素を探してからiframeをクリックした後に新しいタブが表示されます。 –

答えて

1

JavaScriptは関数スコープであり、現在の関数スコープで定義が見つからない場合は、スコープを確認します。

実際には、内部関数の外側のclickedの値を変更しています。

しかし、それはちょっと難しいように見えるかもしれません - タイミングについての感触を得るためにここを見てください - https://jsfiddle.net/6c3nbpk5/1/

var clicked = 'no'; 
window.addEventListener('click', clickListener); 
function clickListener(){ 
     clicked = 'yes'; 
     window.alert(clicked); 
}; 
window.alert(clicked); 
+0

ありがとうございます。私の問題の更新されたjsfiddleの質問を見てください。 –

+0

あなたは**ウィンドウ**に** blur **イベントを持っています、あなたがしたいのは** iframe **の** click **イベントです。答えとしてマークするか、わからないことを教えてください。 –

+0

クロスドメインのiframeではクリックイベントを登録できません。私のjsfiddleのiframeはデモ用のクロスドメインではありませんが、私のプロジェクトではクロスドメインです。したがって、クリックリスナーは機能しません。しかし、私の質問はイベントリスナーとは関係ありません。それは、関数の外で "クリックされた"値を得ることと関係しています。私のjsfiddle https://jsfiddle.net/6c3nbpk5/4/を見てください。「クリックされていません」というテキスト文字列が「クリックされました」に変更されます。 –

0

addEventListenerイベントターゲットから呼び出されなければならない機能です。あなたはそれを何かに等しくするべきではありません。例えば

、あなたはdiv要素を持っているANあなたはそれがクリックされたかどうかを判断する変数を格納したいとしましょう:

var div = document.querySelector('div'); // grabs the first div 
var clicked = false; 

div.addEventListener('click', function() { 
    clicked = true; 
}); 

注:何あなたのコードは、現在のイベントリスナーを登録してやっていますwindowにターゲットを指定していないので、javascriptはwindowと仮定しています。

このように、ページ上の任意のぼかしイベントは、コールバックを発生させます。これが意図された動作であれば、達成しようとしていることをより具体的に説明してください。その問題をデバッグするのに役立ちます。

ぼかしイベントではなくクリックイベントを使用する必要があります。同じ結果を得るためには、ブッシュの周りをちょうど打ち負かすだけです。

+0

更新されたjsfiddleの質問をご覧ください。ありがとう! –

関連する問題