2012-03-19 13 views
5

मैं jQuery के साथ ऑब्जेक्ट की दृश्यता का परीक्षण करने के साथ एक अजीब समस्या में भाग रहा हूं।jQuery ('दृश्यमान) अभिनय मजाकिया है।

मैं इस परीक्षण जे एस है:

alert($myObject.css('display')); 
alert($myObject.is(':visible')); 

पहले चेतावनी प्रदर्शित करता है 'ब्लॉक' जो फ़ायरबग के रूप में समझ में आता है स्पष्ट रूप से पता चलता है कि यह प्रदर्शित करने के लिए सेट कर दिया जाता है कि: ब्लॉक और आप में पृष्ठ पर वस्तु को देख सकते हैं ब्राउज़र।

दूसरी चेतावनी, हालांकि, 'झूठी' प्रदर्शित करती है। जो मुझे बिल्कुल समझ में नहीं आता है।

क्या मैं इसका उपयोग गलत समझ रहा हूं (': दृश्यमान')?

+2

क्या आप jsfiddle में कोड का नमूना दे सकते हैं? कुछ और मार्कअप – redDevil

+0

की मदद करेंगे क्या आप कह रहे हैं कि आपका तत्व * पृष्ठ पर दिखाई दे रहा है, लेकिन '.is (': visible') 'गलत है? @ करसाज़ी का जवाब सही है, लेकिन यदि आपका तत्व वास्तव में दिखाई देता है, तो यह एक अलग मुद्दा हो सकता है। क्या आप इस मुद्दे को दोहराने के लिए एक पहेली तैयार कर सकते हैं? – nrabinowitz

+0

@ j08691 यदि ऑब्जेक्ट प्रदर्शित करने के लिए सेट है: ब्लॉक, और मैं इसे देख सकता हूं, मुझे उम्मीद है कि इस मामले में() कथन सत्य लौटने के लिए है। –

उत्तर

9

इस HTML पर विचार करें। विवरण के लिए :visible selector docs देखें।

क्या यह अब समझ में आता है?

+0

सिवाय इसके कि मैं ब्राउज़र में अपना ऑब्जेक्ट देख सकता हूं - इसका माता-पिता छुपा नहीं है। –

+0

@DA .: क्या आप पूरी तरह से सुनिश्चित हैं? जावास्क्रिप्ट का उपयोग करने से '$ myObject' में हेरफेर करने का प्रयास करें (उदाहरण के लिए। इसकी सीमा लाल पर सेट करें) और हमें बताएं कि परिणाम अपेक्षित है या नहीं। यदि '$ myObject' मैनिपुलेशन ब्राउज़र में जो दिखाई देता है उसे बदलता है, तो हमें और विवरण दें - सटीक परिणाम दिखाते हुए कोड निकालने से समस्या को कम करने का प्रयास करें, और यह कोड हमें दिखाएं। – Tadeck

+0

हां, पहले से ही पूरे बॉर्डर हैक को यह देखने के लिए है कि यह सही वस्तु है या नहीं। मैं यह देखने के लिए पेज को तोड़ने की कोशिश करूंगा कि क्या मुझे समस्या का स्रोत मिल सकता है और मार्कअप पोस्ट कर सकता है। –

4

:visible चयनकर्ता display सीएसएस संपत्ति के बराबर नहीं है।

जुड़ा हुआ प्रलेखन से, दिखाई false है जब:

  • वे कोई भी एक सीएसएस प्रदर्शन मूल्य की है।
  • वे प्रकार = "छुपा" वाले तत्व तत्व हैं।
  • उनकी चौड़ाई और ऊंचाई स्पष्ट रूप से 0
  • एक पूर्वज तत्व छुपा हुआ है, इसलिए तत्व पृष्ठ पर नहीं दिखाया गया है।

    <div id="div1" style="display: none;"> 
        <div id="div2"> 
         <p>Some div content</p> 
        </div> 
    </div> 
    

    और इस जावास्क्रिप्ट:

    $myObject = jQuery('#div2'); 
    alert($myObject.css('display')); // 'block' 
    alert($myObject.is(':visible')); // false 
    

    वहाँ कई कारण $myObject दिखाई न दें, भले ही यह display: none शैली सेट कर रहे हैं

+0

समझा। इनमें से कोई भी इस स्थिति में सच नहीं है। यह प्रदर्शित करने के लिए सेट है: ब्लॉक, यह एक छिपी हुई फॉर्म तत्व नहीं है, इसकी शून्य की कोई स्पष्ट ऊंचाई या चौड़ाई नहीं है और आप इसे पृष्ठ पर देख सकते हैं (इसलिए यह पूर्वजों को छुपाया नहीं दिखता है) –

+0

मैं उम्मीद कर रहा हूं jsFiddle लिंक, मैं समस्या के कारण के बारे में वास्तव में उत्सुक हूँ। –

+0

मैंने यह बताते हुए एक जवाब जोड़ा है कि क्या हुआ। मैं एक शर्मिंदा हूँ। ;) –

3

:visible Selector प्रलेखन से:

तत्वों कई कारणों से छिपा माना जा सकता है:

  • वे कोई भी एक सीएसएस प्रदर्शन मूल्य की है।
  • वे प्रकार = "छुपा" वाले तत्व तत्व हैं।
  • उनकी चौड़ाई और ऊंचाई स्पष्ट रूप से 0
  • एक पूर्वज तत्व छुपा हुआ है, इसलिए तत्व पृष्ठ पर नहीं दिखाया गया है।

जांचें कि इनमें से कोई भी अन्य शर्तें सत्य नहीं हैं।

1

तो, जवाब:

किसी और अपने उद्देश्य यह है कि आप में से, कि घटना किसी भी तर्क आप प्रयोग कर रहे थे पंगा लेना हो सकता है पहले से अनजान थे करने के लिए एक क्लिक करें घटना देता है।;)

हां, यह वही हुआ है। इस ऑब्जेक्ट से एक और क्लिक इवेंट संलग्न किया गया था जो उसके माता-पिता को छिपाने के लिए सेट किया गया था। यह पहले गोलीबारी कर रहा था - मेरे तर्क से पहले यह देखने के लिए जांच की गई थी कि यह दृश्यमान था या नहीं।

अंत में: उपयोगकर्ता त्रुटि।

उपयोगकर्ता-त्रुटि समस्या होने पर प्रतिष्ठा दंड का कुछ रूप होना चाहिए। ;)

+0

साझा करने के लिए धन्यवाद। –

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