2010-02-09 4 views
9

मैं iframe के भीतर से FancyBox को बंद करने की कोशिश कर रहा हूं, लेकिन parent.$ हमेशा undefined है।

<script type='text/javascript' 
    src='http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js'> 
</script> 
<script type="text/javascript"> 
jQuery(document).ready(function($){ 
    (function($) { 
     $.fn.closeFancyBox = function() { 
      $(this).click(function() { 
       parent.$.fancybox.close(); 
      }); 
     }; 
     })(jQuery); 
     $('#cancel').closeFancyBox(); 
     }); 
}); 
</script> 

ठीक parent.$.fancybox.close();alert('clicked'); साथ काम करता है जगह: यह मेरा iframe जावास्क्रिप्ट है। मुझे समझ में नहीं आता कि parent.$undefined है जब iframe एक ही डोमेन में है।

मैं वर्डप्रेस 2.9.1 का उपयोग कर रहा हूँ, Wordpress के लिए FancyBox प्लगइन के साथ।

  • मुख्य पृष्ठ: //server.local/web/test/index.php
  • आइफ्रेम पेज: //server.local/web/test/wp-content/plugins/wp-test/test.htm

इन url के पहले मुख्य पृष्ठ है, दूसरी iframe पृष्ठ है; server.local मेरा होम टेस्ट सर्वर है।

कोई विचार? यदि यह सहायक होगा तो मैं पूरे स्रोत को पेस्टबिन कर सकता हूं।

उत्तर

0

इसे डीबग करने की कोशिश करने में कुछ घंटों बिताए और कहीं भी नहीं मिला। इसलिए मैंने फैंसीबॉक्स के नवीनतम संस्करण के साथ 'वर्डप्रेस फॉर वर्डप्रेस' प्लगइन को स्विच किया, और यह तय किया गया था। वास्तव में पहले कोशिश की जानी चाहिए थी।

वर्डप्रेस और इसके विभिन्न प्लग इन के साथ कुछ समय बिताया होने के बाद, मैं चीजों को मैन्युअल रूप से बुला बल्कि प्लगइन्स पर निर्भर सलाह देते हैं। यह जटिलता की एक और परत जोड़ता है कि, यदि आप जानते हैं कि आप क्या कर रहे हैं, तो वहां रहने की आवश्यकता नहीं है।

वर्डप्रेस में पैरेंट विंडो jQuery के लिए iframe के लिए उचित वाक्यविन्यास को इंगित करने के लिए डौग के लिए धन्यवाद।

7

यह क्योंकि वर्डप्रेस noConflict मोड में jQuery चलाता अनिर्धारित रहता है। बजाय इस का उपयोग करें:

parent.jQuery.fancybox.close(); 

noConflict मोड का मतलब $ नहीं है बराबर jQuery। आपको $ के साथ सामान्य रूप से एक्सेस करने के लिए आपको jQuery का स्पष्ट रूप से उपयोग करना होगा।

+0

क्षमा करें, कहा जाना चाहिए था कि मैं इस के बारे में पता कर रहा हूँ; जेएस मैं शामिल एक स्निपेट था। मैंने इसे प्रतिबिंबित करने के लिए अपना प्रश्न संपादित कर लिया है - $ साधन पास करने के लिए मुझे 'jQuery' का उपयोग करने की आवश्यकता नहीं है। – Aleksandr

+0

@ अलेक्ज़ेंडर ''' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' वास्तव में, आप 'iframe' में jQuery का एक पूरी तरह से अलग उदाहरण शामिल हैं। यदि आपने देखा कि आपने जो लिखा है, तो आप '$' पास करते हैं, लेकिन संदर्भ 'माता-पिता' $ '। ऐसा लगता है कि आपके पास 'var a = 1 है; चेतावनी (obj.a); 'आप उम्मीद नहीं करेंगे कि दो आइटम एक ही मान को संदर्भित करें जब तक कोड में कोई असाइनमेंट न हो। –

+0

आप सही हैं, यह समझ में आता है। हालांकि, निम्न कोड का उपयोग करके: 'jQuery (' # cancel ')। क्लिक करें (function() {parent.jQuery.fancybox.close();}); ' मुझे अभी भी फायरबग में' अपरिभाषित 'त्रुटियां मिलती हैं:' पैरेंट। jQuery.fancybox अपरिभाषित है '। क्या आपको कोई विचार है कि यह क्यों हो सकता है? आपकी मदद के लिए धन्यवाद! मैं जावास्क्रिप्ट और सामान्य रूप से कोडिंग के लिए अभी भी बहुत नया हूं। – Aleksandr

2

यह मेरे लिए काम करता है;)

<a href="javascript:parent.jQuery.fn.fancybox.close();" > 

धन्यवाद इस पोस्ट के लिए, यह वास्तव में मुझे एक छोटे से निर्देशित ... मैं बुरा लग रहा है क्योंकि यह मुझे एक केवल कुछ ही मिनट में ले लिया और मुझे पता है के लिए कैसे निराशा Fancybox वर्डप्रेस है !! अपने iframe में इस लिंक

उपयोग::

0

हाय, किसी को भी जो एक मैनुअल का उपयोग कर एक फैंसी बॉक्स iFrame बंद करने में परेशानी हो रही है Wordpress 3.0 में फैंसी बॉक्स के स्थापित

<a href="#" onClick="parent.jQuery.fancybox.close();" title="Close window">close fancybox</a> 

यह काम करता है :)

1

कोई भी सुझाव मेरे लिए काम नहीं करता है। मुझे निम्नलिखित कोड का उपयोग करके इसके आसपास काम करना पड़ा। नवीनतम संस्करण parent.jQuery.fancybox.close() का समर्थन कर सकता है; दृष्टिकोण, लेकिन पुराने संस्करण उस के साथ काम नहीं करते हैं।

प्लगइन्स के पुराने संस्करणों के साथ मौजूदा साइटों के लिए/jQuery, इस

function close_window() 
{ 
$("#fancy_outer",window.parent.document).hide(); 
$("#fancy_overlay",window.parent.document).hide(); 
//window.top.window.$.fancybox.close(); this also does not work :(
} 

आप यह घोषणा करते और Iframe सामग्री के भीतर समारोह close_window इस्तेमाल कर सकते हैं की कोशिश करो। ।।

2

मैं यह करने के लिए किया था:

window.top.window $ fancybox.close();

पहले टाइप प्रकार त्रुटि मिली।

3

parent.fancybox.close() के किसी भी बदलाव ने मेरे लिए काम नहीं किया है, कुछ lib संघर्ष होना चाहिए।

यहां नवीनतम फैंसीबॉक्स के लिए मेरा कामकाजी कामकाज है, आपको .hide() विधि के बजाय सीएसएस डिस्प्ले प्रॉपर्टी का उपयोग करना चाहिए क्योंकि उस मामले में फैंक्सबॉक्स फिर से नहीं खुल जाएगा।

parent.jQuery('#fancybox-overlay').css('display', 'none'); 
parent.jQuery('#fancybox-wrap').css('display', 'none'); 
+0

सबसे अच्छा हैक कभी। धन्यवाद! – AimanB

3

मेरा उत्तर WordPress से संबंधित नहीं है, लेकिन सामान्य रूप से फैंक्सबॉक्स के लिए एक है।

iframe में

, यदि आप मुख्य jQuery स्क्रिप्ट (jQuery-1.5.2.min.js), तो यह मुख्य पृष्ठ पर एक साथ माता पिता। $ संघर्ष, और होगा। को शामिल किया है fancybox नहीं होगा इस मामले में काम करते हैं।

अन्य jquery संबंधित सामग्री (जैसे उदाहरण के लिए: टैब) iframe के अंदर काम करेगा। इसलिए, यह एक नौसिखिया प्रोग्रामर के लिए नहीं होगा कि आईफ्रेम के अंदर दूसरी jquery स्क्रिप्ट खलनायक है।

+0

यह बेहद उपयोगी जानकारी है। – dangermark

1

मैं एक ही समस्या थी और पाया है कि मैं

type:'iframe' 

उपयोग नहीं कर रहा जब fancybox बुला, यह मेरी समस्या हल

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