2012-04-28 32 views
3

window.onblurが正しく動作するように見えません。window.onblurが動作しない

window.onblur = console.log('blur'); 

リスナーがウィンドウに適用されると、ページがロードされたときにのみリスナが実行されますが、フォーカスが失われたときはリスナーが実行されません。

答えて

17
window.onblur = function() { console.log('blur'); } 
+5

ユーザーがアドレスバーのタブまたはクリックを切り替えた場合、どのように機能するのですか。 –

+0

@CharlesJohnThompsonIIIこれはトリックをするかもしれないと思うが、あなたは今それについてすべてを忘れているかもしれない。私は同様の問題を抱えていましたが、これは今私の解決策でした。 – Steve

+0

@CharlesJohnThompsonIII MDNのページの可視性APIをチェックアウトします。 'visibiltychange'イベントがあなたが探しているイベントかもしれません。 –

19

Ryudiceは何をするかあなたに言ったが、それはあなたのように動作しなかった理由を説明しませんでした。それの仕組みを理解することで、さらに進める方法を理解するのに役立ちます。

理由は、元のコードがすぐconsole.log('blur')のコマンドを実行している、とのonblurイベントウィンドウとしてその呼び出しの戻り値を使用していることです。

戻り値console.log()はブラウザによって異なりますが、引数として、ブール値trueを返します。つまり、元のコードは次のように書かれています。

window.onblur = true; 

これは明らかに期待通りに動作しません。

window.onblurは、onblurイベントがトリガーされるたびに呼び出される関数に設定する必要があります。これは、Ryudiceの答えに従ってコードをfunction() {}にラップすることで実現します。

また、呼び出す関数名に角括弧を付けないことで簡単に実現できます。しかし、このメソッドは関数に渡す引数がない場合にのみ機能しますので、console.logの例には適しません。

希望に役立ちます。あなたがまだ困惑しているなら、ウェブにはたくさんのリソースがあります。 "javascript関数を引数として渡す"のようなフレーズでグーグルグーグルで試してみてください。

1
window.onblur =() => console.log("blur"); 
+0

CoffeeScriptなしでも動作しない –

+3

@FlorianEckはい、これは単なる矢印機能です(https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/Arrow_functions)。これは標準的な部分ですのJavaScript(ES6,2015で追加)。 – towerofnix

関連する問題