2011-04-19 13 views
7

मैं वर्तमान में navGrid, del सेट के साथ jqGrid का उपयोग कर रहा हूं। समस्या तब होती है जब कोई उपयोगकर्ता डिलीट पर क्लिक करता है, तो यह ग्रिड के ऊपरी बाएं हाथ में एक पुष्टिकरण बॉक्स पॉप अप करता है। चूंकि हम पहले से ही नीचे की ओर स्क्रॉल कर चुके हैं, जिसमें मेरी बड़ी ऊंचाई है, उपयोगकर्ता को पुष्टि करने के लिए शीर्ष पर सभी तरह से जाना है। क्या इस स्थिति को स्थानांतरित करने का कोई तरीका है? एक मैनुअल ऑफसेट बस ठीक है, लेकिन आदर्श रूप से मैं इसे बाईं ओर अपनाने के रूप में नीचे बाईं ओर डॉक करना चाहता हूं।jqGrid रिपोजिशन पुष्टिकरण बॉक्स हटाएं

अग्रिम धन्यवाद

(यह एक शिकार मैं माफी चाहता हूँ है। मैं सिर्फ यह पोस्टिंग की कोशिश की लेकिन यह मुझे कुछ अजीब त्रुटि दे दी है और अपने इतिहास में नहीं दिख रहा है, तो यह पोस्ट नहीं ग्रहण किया।)

उत्तर

9

मुझे लगता है कि एक डुप्ली नहीं है। इसके विपरीत मुझे यह अच्छा लगता है कि मेरे द्वारा +1।

jqGrid आंतरिक रूप से विधि viewModal ($.jgrid.viewModal) का उपयोग करता है जो सबसे अधिक संवाद दिखाता है। विधि toTop पैरामीटर है, लेकिन delGridRow और editGridRow इसका उपयोग नहीं करते हैं और इसे toTop:true पर सेट किया जाएगा। तो जोड़ें, संपादित करें और हटाएं संवाद हमेशा ग्रिड के शीर्ष पर प्रदर्शित किए जाएंगे जो कि परिवर्तनीय क्षेत्र के अंदर हो सकता है।

समस्या को ठीक करने के लिए आप afterShowForm ईवेंट हैंडल को परिभाषित कर सकते हैं जो संवाद स्थिति बदलता है। उदाहरण के लिए

$("#list").jqGrid('navGrid','#pager', {}, {}, {}, 
        { 
         afterShowForm: function($form) { 
          var dialog = $form.closest('div.ui-jqdialog'), 
           selRowId = myGrid.jqGrid('getGridParam', 'selrow'), 
           selRowCoordinates = $('#'+selRowId).offset(); 
          dialog.offset(selRowCoordinates); 
         } 
        }); 

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

आप the live demo पर हटाएं संवाद के सुझाए गए आंदोलन का परीक्षण कर सकते हैं।

+0

मुझे अभी तक इसे अपने कोडिंग में जोड़ना है, लेकिन डेमो द्वारा ऐसा लगता है कि मुझे क्या चाहिए। आपको बहुत - बहुत धन्यवाद! –

+0

डेमो अब और काम नहीं कर रहा है। फॉर्म अभी भी बहुत ऊपर पॉपअप है। क्या मैं कुछ भूल रहा हूँ? – devXen

+0

@Censformers: परीक्षण के लिए आपने किस वेब ब्राउज़र का उपयोग किया था? अपने परीक्षण को एक और बार पुन: पेश करने का प्रयास करें: 1) डेमो खोलें; 2) ग्रिड के निचले भाग के करीब एक पंक्ति का चयन करें ताकि आप नेविगेटर बार देख सकें (उदाहरण के लिए पंक्ति संख्या 2 9 0 का चयन करें) 3) "हटाएं" बटन पर क्लिक करें 4) सत्यापित करें कि "हटाएं" संवाद प्रदर्शित होता है ** के तहत चयनित पंक्ति ** (पंक्ति संख्या 2 9 0 के तहत)। यदि कोई मेरे उत्तर से 'आफ्टरशोफॉर्म' का उपयोग नहीं करता है तो हटाएं संवाद चयनित पंक्ति के बजाय ग्रिड के शीर्ष पर प्रदर्शित किया जाएगा। – Oleg

7

कुछ बेहतर here मिला!

अपने जावास्क्रिप्ट पुस्तकालय में इस जोड़ें:

afterShowForm: function(form) { 
    form.closest('div.ui-jqdialog').center(); 
} 

form.closest ('div.ui-jqdialog') =:

jQuery.fn.center = function() { 
    this.css("position","absolute"); 
    this.css("top", ($(window).height() - this.height())/2+$(window).scrollTop() + "px"); 
    this.css("left", ($(window).width() - this.width())/2+$(window).scrollLeft() + "px"); 
    return this; 
} 

अब तुम सिर्फ afterShowForm संपत्ति में इस जोड़ने की जरूरत > आपको मोडल पॉपअप विंडो प्राप्त करने की अनुमति देता है, अगर यह एक संपादनफॉर्म या डिलीटफॉर्म है तो सटीक करने की आवश्यकता नहीं है।

यह कोड पॉपअप को आपकी स्क्रीन के केंद्र में स्थानांतरित करता है, इसलिए यदि आपके पास वास्तव में बड़ा ग्रिड है तो आपको स्क्रॉल करने की आवश्यकता नहीं है।

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