2010-04-08 19 views
14

प्रिंट करें कुछ समय पहले मैंने jQuery का उपयोग करके एक लाइटबॉक्स प्लगइन बनाया जो एक लाइटबॉक्स में एक लिंक में निर्दिष्ट यूआरएल लोड करेगा। कोड वास्तव में सरल है:पॉपअप विंडो खोलने के लिए JQuery का उपयोग करना और

$('.readmore').each(function(i){ 
    $(this).popup(); 
}); 

और लिंक इस तरह दिखेगा:

<a class='readmore' href='view-details.php?Id=11'>TJ Kirchner</a> 

प्लगइन भी के माध्यम से पारित करने के लिए चौड़ाई, ऊंचाई, एक अलग यूआरएल, और अधिक डेटा के लिए तर्क को स्वीकार कर सकता है।

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

$('.printBtn').bind('click',function() { 
    var url = options.url + ((options.url.indexOf('?') < 0 && options.data != "") ? '?' : '&') + options.data; 
    var thePopup = window.open(url, "Member Listing", "menubar=0,location=0,height=700,width=700"); 
    thePopup.print(); 
}); 

समस्या यह है कि स्क्रिप्ट विंडो लोड होने तक प्रतीक्षा नहीं कर रही है। यह खिड़की दिखाई देने के पल मुद्रित करना चाहता है। नतीजतन, यदि मैं प्रिंट संवाद बॉक्स में "रद्द करें" पर क्लिक करता हूं, तो यह विंडो लोड होने तक बार-बार पॉपअप करेगा। पहली बार जब मैंने प्रिंटिंग की कोशिश की तो मुझे एक खाली पृष्ठ मिला। ऐसा इसलिए हो सकता है क्योंकि खिड़की लोड खत्म नहीं हुई थी।

मुझे पिछले कोड ब्लॉक को विंडो लोड होने तक प्रतीक्षा करने के लिए एक रास्ता खोजने की आवश्यकता है और फिर प्रिंट करें। मुझे लगता है कि ऐसा करने का एक आसान तरीका होना चाहिए, लेकिन मुझे अभी तक यह नहीं मिला है। या तो, या मुझे पॉपअप विंडो खोलने के लिए एक बेहतर तरीका खोजने और पॉपअप विंडो में वेबपृष्ठ कोड को वैकल्पिक किए बिना, मूल विंडो में लाइटबॉक्स स्क्रिप्ट से प्रिंट करने की आवश्यकता है।

उत्तर

26

आप अपनी व्यू-details.php फ़ाइल में प्रिंट समारोह रखा है और यह सुनिश्चित करें कि फोन एक बार फ़ाइल या तो का उपयोग कर <body onload="window.print()"> या $(document).ready(function() { window.print(); });

+1

ठीक है, मैं इसे view-details.php फ़ाइल में कोड जोड़ने के बिना ऐसा करने की कोशिश कर रहा हूं क्योंकि उस फ़ाइल को यह जानने की आवश्यकता नहीं है कि इसे मुद्रित किया जा रहा है। इस तरह मुझे लाइटबॉक्स में लोड की गई प्रत्येक फ़ाइल में कोड का एक स्निपिट जोड़ने की ज़रूरत नहीं है। –

+0

यदि आप इसे लाइटबॉक्स में लोड कर रहे हैं तो आप window.open का उपयोग क्यों करते हैं? यदि आप AJAX के माध्यम से एचटीएमएल लोड करने के लिए jQuery का उपयोग कर रहे हैं तो आप jQuery में .load() फ़ंक्शन का उपयोग कर सकते हैं और प्रिंट को ऑन-असफल कॉलबैक के साथ ट्रिगर कर सकते हैं। –

+0

क्योंकि मैं लाइटबॉक्स से बहुत अच्छी तरह प्रिंट नहीं कर सकता। मुझे इसके चारों ओर इस काले रंग की पृष्ठभूमि मिल गई है। यह अपनी खिड़की में बेहतर दिखता है और प्रिंट करता है। यह .load() का उपयोग करके एक दिलचस्प विचार है, लेकिन मैं नहीं चाहता कि सामग्री लाइटबॉक्स लोड के ठीक बाद प्रिंट करे। केवल जब उपयोगकर्ता प्रिंट लिंक पर क्लिक करता है, तो क्या मैं बॉक्स को प्रिंट करना चाहता हूं। –

0

से भरी हुई है आप कर रहे हैं चाहिए आप पॉप अप विंडो में एचटीएमएल परिवर्तन नहीं कर सकते ?

आप, पॉपअप के HTML के अंत पर एक <script> टैग जोड़ सकते हैं, और window.print() इसके अंदर कॉल करें। तब तक इसे तब तक नहीं बुलाया जाएगा जब तक कि HTML लोड नहीं हो जाता है।

+0

मैं पॉपअप विंडो में एचटीएमएल कोड को बदलना नहीं चाहता ... लेकिन हो सकता है कि मैं लोड होने वाले एचटीएमएल पर एक ऑनलोड = "window.print()" जोड़ सकता हूं ... मुझे उस विचार के साथ थोड़ा सा खेलना चाहिए –

7

समझ गया! मैं यहाँ

http://www.mail-archive.com/[email protected]/msg18410.html

एक विचार पाया इस उदाहरण में, वे एक वस्तु में कोई खाली पॉपअप विंडो लोड, तत्व की सामग्री प्रदर्शित करने के लिए क्लोन, और वस्तु की शरीर के लिए यह संलग्न। चूंकि मुझे पहले से ही पता था कि दृश्य-विवरण (या लाइटबॉक्स में लोड किए गए किसी भी पेज) की सामग्री, मुझे बस उस सामग्री को क्लोन करना था और उसे किसी ऑब्जेक्ट में लोड करना पड़ा था। फिर, मुझे बस उस वस्तु को मुद्रित करने की आवश्यकता थी। अंतिम परिणाम इस प्रकार है:

$('.printBtn').bind('click',function() { 
    var thePopup = window.open('', "Customer Listing", "menubar=0,location=0,height=700,width=700"); 
    $('#popup-content').clone().appendTo(thePopup.document.body); 
    thePopup.print(); 
}); 

मुझे लगता है कि शैली पत्रक मैं दृश्य-details.php में उपयोग कर रहा था एक रिश्तेदार लिंक का उपयोग किया गया था में एक छोटी सी खामी थी। मुझे इसे एक पूर्ण लिंक में बदलना पड़ा। इसका कारण यह है कि खिड़की के पास एक यूआरएल नहीं था, इसलिए इसमें कोई सापेक्ष स्थिति नहीं थी।

फ़ायरफ़ॉक्स में काम करता है। मुझे इसे किसी अन्य प्रमुख ब्राउज़रों में भी परीक्षण करने की ज़रूरत है।

मुझे नहीं पता कि यह समाधान छवियों, वीडियो या अन्य प्रक्रिया गहन समाधानों से निपटने पर कितना अच्छा काम करता है। हालांकि, यह मेरे मामले में बहुत अच्छी तरह से काम करता है, क्योंकि मैं सिर्फ टेबल और टेक्स्ट मान लोड कर रहा हूं।

इनपुट के लिए धन्यवाद! आपने मुझे कुछ विचार दिए कि इस के आसपास कैसे जाना है।

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