2015-11-28 14 views
7

私はより効率的に考えています。要素の表示をnoneに設定すると、javascriptは接続されているイベントをリッスンし続けますか、または表示が元に戻されるまで一時的に削除しますか?CSS/Javascript - 関連するイベントリスナーを一時的に削除しますか?

+1

これはイベントリスナーを削除しませんが、コードからイベントをトリガーすることはできますが、ユーザーが要素を非表示にしてもイベントを呼び出すことはできません。 –

+0

あなたが話しているイベントの種類によって異なります。 –

+0

私自身のコードの点では、主にクリックイベントまたはマウスオーバーイベントです。 – sookie

答えて

4

発生するイベントの種類によって異なります。さんはclickイベントを使用してみましょう:まず本部に

$(function() { 
 
    // Let's attach an event. 
 
    $("#eventContainer").click(function() { 
 
    $("#eventAffected").html("I changed."); 
 
    }); 
 
    // This will hide the container surely when you click. 
 
    $("#hide-container").click(function() { 
 
    $("#eventContainer").hide().css("display", "none"); 
 
    }); 
 
    // This will trigger the event on the element. 
 
    $("#trigger-event").click(function() { 
 
    $("#eventContainer").trigger("click"); 
 
    }); 
 
});
* {font-family: 'Segoe UI'; margin: 5px;} 
 
#eventContainer, #eventAffected {background-color: #ccf; text-align: center; padding: 5px;} 
 
#eventAffected {background-color: #cfc;}
<script src="https://code.jquery.com/jquery-1.9.1.js"></script> 
 
<div id="eventContainer">Hello I am the Event Box</div> 
 
<div id="eventAffected">Hello, I change when event triggered on the above.</div> 
 
<button id="hide-container">Hide</button> 
 
<button id="trigger-event">Trigger Click</button>

テストケース

  1. をクリックします。2番目のDiv変更、イベントがトリガされます。
  2. トリガークリックをクリックします。2番目のDiv変更、イベントがトリガされます。
  3. [非表示とトリガー]をクリックします。2番目のDiv変更、イベントがトリガされます。

結論、DOM要素が画面内または画面外表示されているか否か

は、すべてのイベント及び動作が保存されます。 CSS表示のみが変更されます。他に何も、行動に関係するものは影響を受けません。

これはすべてのイベントに似ていますが、唯一のものはできません寸法またはボックスモデルを計算します。

これは、visibility: hiddenまたはdisplay: noneの場合にイベントが保存されることを示しています。

+0

この説明に感謝します。 Quentinの答えに、たとえイベントが削除されない場合でも、要素が表示されていないときにブラウザがテストを停止すると言っているのは間違いありませんか? – sookie

+1

技術的にチェックされ、トリガーされます。しかし、あなたは見ることができません。私はクエンティンがどのようにそれを証明するのか分かりませんが、これは私の見解です。 ':)' –

+2

私はいくつかの例を持っている[ここ](https://jsfiddle.net/ohad/2L46tego)。 display none要素に設定されたイベントがトリガーされたことがわかります –

0

いいえ、それはそれらを削除しませんが、要素とその子孫のすべてがレンダリングされていないため、ユーザーはそれらのいずれかでイベントをトリガするための方法はありませんので、ブラウザをテストすることはありません要素にイベントハンドラがあるかどうかを確認します。

関連する問題