2015-11-28 2 views
7

मैं दक्षता के मामले में और सोच रहा हूं। यदि मैं किसी तत्व का प्रदर्शन none पर सेट करना चुनता हूं, तो क्या जावास्क्रिप्ट इसके साथ जुड़ी घटनाओं को सुनना जारी रखेगा, या क्या यह अस्थायी रूप से उन्हें तब तक हटा देगा जब तक कि प्रदर्शन वापस नहीं किया जाता है?सीएसएस/जावास्क्रिप्ट - क्या "प्रदर्शित: कोई नहीं" किसी भी संबंधित ईवेंट श्रोताओं को अस्थायी रूप से हटा देता है?

+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. क्लिक करें।द्वितीय div परिवर्तन, ईवेंट ट्रिगर किया गया है।
  2. ट्रिगर क्लिक पर क्लिक करें।द्वितीय div परिवर्तन, ईवेंट ट्रिगर किया गया है।
  3. छुपाएं और ट्रिगर क्लिक पर क्लिक करें।द्वितीय div परिवर्तन, ईवेंट ट्रिगर किया गया है।

निष्कर्ष

हो या न हो, डोम तत्व स्क्रीन में या ऑफ स्क्रीन दिखाई दे रहा है, सभी घटनाओं और व्यवहार संरक्षित कर रहे हैं। केवल सीएसएस प्रदर्शन बदल गया है। कुछ और नहीं, व्यवहार से संबंधित कुछ भी प्रभावित नहीं है।

यह सभी घटनाओं के समान है, केवल एक चीज है, आप आयाम या बॉक्स मॉडल की गणना नहीं कर सकते हैं।

तो इससे पता चलता है कि visibility: hidden या display: none होने पर ईवेंट संरक्षित होते हैं।

+0

इस स्पष्टीकरण के लिए बहुत धन्यवाद। क्वांटिन के जवाब को निर्देशित करना, भले ही ईवेंट को हटाया न जाए, क्या मैं यह कहने में सही हूं कि जब तत्व प्रदर्शित नहीं किया जा रहा है तो ब्राउजर उनके लिए परीक्षण करना बंद कर देगा? – sookie

+1

तकनीकी रूप से यह जांच और ट्रिगर किया जाएगा। लेकिन आप देखने में सक्षम नहीं होंगे। मुझे नहीं पता कि क्वांटिन इसे साबित करने वाला कैसे है, लेकिन यह मेरा विचार है। ':)' –

+2

मेरे पास कुछ उदाहरण है [यहां] (https://jsfiddle.net/ohad/2L46tego)। आप देख सकते हैं कि प्रदर्शन पर सेट की गई कोई भी घटना –

0

नहीं, यह उन्हें नहीं हटाता है, लेकिन चूंकि तत्व और उसके सभी वंशजों को प्रस्तुत नहीं किया जाता है, इसलिए उपयोगकर्ता के किसी भी घटना पर ट्रिगर करने का कोई तरीका नहीं है, इसलिए ब्राउज़र कभी परीक्षण नहीं करेगा यह देखने के लिए तत्व है कि इसमें कोई ईवेंट हैंडलर है या नहीं।

संबंधित मुद्दे

 संबंधित मुद्दे