0

がない限り(これは今クリックリスナーを起動し、ユーザーが自分のボタンをクリックすると、クリックイベントが私のボタンの上に発射して、そのすべての親に伝播します特定の要素のイベントをリッスンして、関係のない要素にそのイベントを発生させますか?

btn.addEventListener("click", function(e) { 
    console.log("button clicked"); 
}); 

私は、ボタンのクリックをリッスン言いますバブリングが防止される)。しかし、ユーザーが完全に無関係の要素をクリックするとどうなりますか?これによりイベントがその要素で発生し、それからすべての親に伝播するかどうか(これらのクリックイベントを処理することに興味がない場合でも)

特定の要素でリスンを開始すると、ウィンドウ全体のクリックに対してリスナーが必要であると私の推測は間違いありません。しかし、私は確信していません。オライリーによるJavaScriptの要旨を

+0

イベントは発生するはずですが、コードを記述しない限り、イベントは処理されません。 – AndFisher

+0

他の要素とのやりとりが発生した場合、あなたのハンドラはイベントを発生させますか?私はそうは思わないだろう。イベントシステムは、追加されたハンドラに関係なく実行されている必要があります。誰かがどこかでハンドラを追加するまで起動しなければ、私は驚くだろう。しかし、私は確かにわからないと思う。 –

+0

@squint、それらのハンドラがまったくないのにすべてのイベントが聴かれていますか?これは、可能なイベントの問題を考えれば、プロセッサ時間の膨大な無駄です。それについては確かですか? – user7307621

答えて

0

:イベントが発生すると

、ブラウザを使用すると、そのイベントの イベントハンドラを定義したかどうかを確認します。持っていれば、その機能が実行されます。 関数が完了すると、ブラウザはイベントループを再び開始します。 このイベントループは、Webページがロードされている限り続きます。

これは、すべてのクリック方法がブラウザによって処理されることを意味します。ただし、リスナーが割り当てられていない場合は、それ以上は行いません。しかし、少なくとも、何かがクリックされたときを知っています。

+0

これは、ユーザーがキーを入力するたびに、 'keydown、keyup、keypress'のようなイベントが発生し、ブラウザはこれらのイベントのハンドラがあるかどうかをチェックします。 CPU時間の浪費... – user7307621

+0

はい、そのように見えるかもしれませんが、Javascriptには一般的に非ブロックI/Oの概念があります。私はあなたに[ここ](http://blog.carbonfive.com/2013/10/27/the-javascript-event-loop-explained/)、[here](https:// developer、 mozilla.org/tr/docs/Web/JavaScript/EventLoop)と[ここ](http://altitudelabs.com/blog/what-is-the-javascript-event-loop/) –

関連する問題