2012-11-01 9 views
6

मैं वर्तमान में अपने पॉपओवर में सामग्री को गतिशील रूप से जोड़ने के लिए एक स्क्रिप्ट कहता हूं लेकिन जब उपयोगकर्ता इसे बंद करने के लिए फिर से क्लिक करता है तो मुझे यह कॉल करने की आवश्यकता नहीं होती है। क्या यह राज्य को प्राप्त करना और इसे दिखने पर बंद करना संभव है?क्या मुझे ट्विटर बूटस्ट्रैप पॉपओवर की वर्तमान स्थिति मिल सकती है?

$('.knownissue').on('click', function() { 

    var info = $(this).attr('id').substr(5).split(':'); 
    var el = $(this); 

    // How do I check to see if the popover is visible 
    // so I can simply close it and exit? 

    $.post('functions/get_known_issues.php?tcid='+info[0]+'&tcdate=' + info[1], function(data) { 
     if (data.st) { 
      el.attr('data-content', data.issue); 
      el.popover('toggle'); 
     } 
    }, "json"); 

}); 
+0

यदि आप देखते हैं कि प्लगइन कैसे जांचता है (github)] (https://github.com/twitter/bootstrap/blob/v2.2.1/js/bootstrap-tooltip.js#L240) – Sherbrow

उत्तर

0

बूटस्ट्रैप कहते हैं और, गतिशील पॉपओवर के लिए मार्कअप को हटा, ताकि आप केवल तत्व के होने की जाँच की जरूरत है:

यह वही है मैं अब तक है।

आप बूटस्ट्रैप उदाहरण पेज पर जाएं: http://twitter.github.com/bootstrap/javascript.html#popovers, आप बड़े लाल बटन वहाँ प्रदर्शित कि कहते हैं के साथ अपने उदाहरण पॉपओवर टॉगल कर सकते हैं कि पॉपओवर तत्व का चयन करने

यह jQuery चयनकर्ता लिखा है "पॉपओवर टॉगल करने के लिए क्लिक करें" यदि यह $ ('# popovers') मौजूद है। ('h3')। eq (5) .next()। ढूंढें ('popover')

इसकी स्थिति जांचने के लिए (मौजूद है या नहीं), चेक करें यदि लौटा तत्व सेट की लंबाई 0.

तो बटन को अपने पॉपओवर उदाहरण को टॉगल करने के लिए दबाएं, फिर अनुसरण करें कंसोल में ing:

टॉगल पॉपओवर पर

console.log( 
    $('#popovers').find('h3').eq(5).next().find('.popover').length === 0 
); // false 

टॉगल पॉपओवर बंद

console.log( 
    $('#popovers').find('h3').eq(5).next().find('.popover').length === 0 
); // true 

पुनश्च - उम्मीद है कि आप एक बेहतर चयनकर्ता लिखेंगे के बाद से आप पहले से ही पता है कि तुम करने की आवश्यकता के लिए जा रहे पृष्ठ पर पॉपओवर मौजूद है या

संपादित करें: link to jsfiddle HERE

+0

पर आपको एक सुराग मिल सकता है मुझे लगता है कि मैं नहीं देखता कि यह कैसे काम करेगा। मैं तत्व के अस्तित्व की जांच करता हूं और यह टॉगल राज्यों दोनों के लिए 0 देता है ... – user1216398

+0

यहां जाएं और पॉपअप पर क्लिक करें: http://jsfiddle.net/eLjQG/7/ मैंने यह जांचने के लिए सशर्त स्विच किया कि लंबाई बराबर नहीं है, इसलिए यह खुला होने पर गलत होता है, जब यह नहीं होता है। –

6
if($('.popover').hasClass('in')){ 
    // popover is visable 
} else { 
    // popover is not visable 
} 
+0

आपके पास कई पॉपओवर हो सकते हैं, यदि कुछ अन्य पॉपओवर दिखाए जाते हैं तो यह असफल हो जाएगा। – Vedmant

7

डायनामिक रूप से सम्मिलित मार्कअप के लिए खोज से बचने के लिए आप यह कर सकते हैं:

बूटस्ट्रैप 2 में:

var $element = $('.element-you-added-popup-to') 
$element.data().popover.tip().hasClass('in') 
// Or if you used '.tooltip()' instead of '.popover()' 
$element.data().tooltip.tip().hasClass('in') 

बूटस्ट्रैप 3 में:

$element.data()['bs.popover'].tip().hasClass('in') 
$element.data()['bs.tooltip'].tip().hasClass('in') 
+5

कारण अनचाहे टाइपरर: क्रोम 45 में अपरिभाषित की संपत्ति 'पॉपओवर' नहीं पढ़ सकता। $ element.data() ['bs.popover']। Tip()। HasClass ('in') –

1

छिपे रहते हैं और पता चला घटनाओं उपलब्ध हैं डिफ़ॉल्ट रूप से बूटस्ट्रैप पॉपओवर में।

$('#myPopover').on('shown.bs.popover', function() { 
 
    // do something… 
 
})

बूटस्ट्रैप पॉपओवर के लिए आने वाले इवेंट उपलब्ध

show.bs.popover \t 
 
shown.bs.popover 
 
hide.bs.popover \t 
 
hidden.bs.popover

कृपया अधिक जानकारी के लिए डॉक्स bootstrap popovers को देखें हैं

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