2012-11-22 16 views
84

मेरे पास jquery 1.5 पर एक ऐप है जो संवाद ठीक काम करता है। जबकि मेरे पास बहुत सारे हैंडलर हैं, मैंने इसे बदल दिया। इसके लिए, मुझे jquery अपडेट करना होगा (अब 1.8.3 एक jquerui 1.9.1)।jquery ui संवाद: प्रारंभिक से पहले संवाद पर विधियों को कॉल नहीं कर सकता

अब, मुझे मिल गया:

जावास्क्रिप्ट

var opt = { 
     autoOpen: false, 
     modal: true, 
     width: 550, 
     height:650, 
     title: 'Details' 
}; 

$(document).ready(function() { 
$("#divDialog").dialog(opt); 
    $("#divDialog").dialog("open"); 
...  

एचटीएमएल कोड

<div id="divDialog"> 
<div id="divInDialog"></div> 
</div> 

किसी भी विचार क्यों यह हो रहा हो सकता है: Error: cannot call methods on dialog prior to initialization; attempted to call method 'close'

के बाद कोड है?

उत्तर

109

इस प्रयास करें बजाय

$(document).ready(function() { 
    $("#divDialog").dialog(opt).dialog("open"); 
}); 

तुम भी कर सकते हैं:

var theDialog = $("#divDialog").dialog(opt); 
theDialog.dialog("open"); 

क्योंकि संवाद $('#divDialog') में संग्रहीत नहीं है यही कारण है, लेकिन एक नए div कि मक्खी पर बनाया गया है और द्वारा दिया जाता है पर .dialog(opt) फ़ंक्शन।

+4

यह मेरे लिए काम किया। क्या हर बार जब मैं इसे खोलना चाहता हूं या केवल पहली बार संवाद शुरू करना है? कई संवाद हैं। विकल्प प्रारंभिक सेट करने के लिए कोई रास्ता नहीं है और फिर बटन द्वारा संवाद खोलें? – user1846096

+0

आप एक ही बटन क्लिक के साथ सभी संवाद खोलना चाहते हैं? –

+4

मैंने पाया कि इस समाधान ने "प्रारंभ करने से पहले संवाद पर विधियों को कॉल नहीं किया जा सकता है; कॉल करने का प्रयास किया गया 'ओपन'" त्रुटि तब होती है जब एक संवाद सफलतापूर्वक खोला जाता है, बंद होता है, और फिर उपयोगकर्ता एक दूसरे को संवाद खोलने का प्रयास करते हैं पहर। धन्यवाद @ZOD – spadelives

8

मुझे यह त्रुटि मिली जब मैंने केवल jquery लाइब्रेरी को समानांतर में jqueryui लाइब्रेरी को अपडेट किए बिना अपडेट किया। मैं jqueryui 1.9.0 के साथ jquery 1.8.3 का उपयोग कर रहा था। हालांकि, जब मैंने jquery 1.8.3 से 1.9.1 अपडेट किया तो मुझे उपरोक्त त्रुटि मिली। जब मैंने .close विधि रेखाओं को अपमानित करते हुए टिप्पणी की, तो उसने jquery लाइब्रेरी में .browser नहीं ढूंढने के बारे में एक त्रुटि फेंक दी जिसे jquery 1.8.3 में बहिष्कृत किया गया था और jquery 1.9.1 से हटा दिया गया था। तो मूल रूप से, jquery ui डाउनलोड पेज के बावजूद jquery ui 1.9.0 लाइब्रेरी jquery ui 1.9.0 लाइब्रेरी के साथ संगत नहीं था, यह कहता है कि यह jquery 1.6+ के साथ काम करता है। अनिवार्य रूप से, दोनों के अलग-अलग संस्करणों का उपयोग करने की कोशिश करते समय अनगिनत बग हैं। यदि आप jqueryui डाउनलोड के साथ बंडल किए गए jquery संस्करण का उपयोग करते हैं, तो मुझे यकीन है कि आप ठीक होंगे, लेकिन जब आप पीटा पथ से अलग संस्करणों का उपयोग शुरू करते हैं और इस तरह की त्रुटियां प्राप्त करते हैं। तो, संक्षेप में, यह त्रुटि गलत मिलान वाले संस्करणों से है (वैसे भी मेरे मामले में)।

+4

मैंने अपने jquery UI संस्करण को 1.9.2 में अपग्रेड करके इस समस्या को हल किया और फिर यह काम किया। तो, jquery ui 1.9.2 के साथ jquery 1.9.1 उपरोक्त त्रुटि से छुटकारा पाता है। – johntrepreneur

12

आप jQuery अपग्रेड नहीं कर सकते हैं और आप हो रही है:

Uncaught Error: cannot call methods on dialog prior to initialization; attempted to call method 'close' 

तुम इतनी है कि यह आस-पास काम कर सकते हैं:

$(selector).closest('.ui-dialog-content').dialog('close'); 

या आप दृश्य को नियंत्रित और पता है कोई अन्य संवाद में होना चाहिए, अगर पूरे पृष्ठ पर बिल्कुल उपयोग करें, आप कर सकते हैं:

$('.ui-dialog-content').dialog('close'); 

मैं केवल वें करने की सिफारिश करता हूं यदि closest का उपयोग कर प्रदर्शन समस्या का कारण बनता है। सभी संवादों पर वैश्विक बंद किए बिना इसके आसपास काम करने के अन्य तरीके हैं।

$("div[aria-describedby='divDialog'] .ui-button.ui-widget.ui-state-default.ui-corner-all.ui-button-icon-only.ui-dialog-titlebar-close").click(); 
0

यह भी चारों ओर कुछ काम है

var theDialog = $("#divDialog").dialog(opt); 
theDialog.dialog("open"); 

और यदि आप संवाद में एक MVC आंशिक देखें खोलते हैं, तो आप सूचकांक में बना सकते हैं एक छिपा बटन और jQuery क्लिक करें घटना:

$("#YourButton").click(function() 
{ 
    theDialog.dialog("open"); 
    OR 
    theDialog.dialog("close"); 
}); 

तो आंशिक दृश्य एचटीएमएल अंदर आप की तरह बटन ट्रिगर क्लिक टू कॉल:

$("#YouButton").trigger("click") 

देखें।

1

तो आप इस का उपयोग करें::

-2

मैं क्योंकि मैं माता पिता के दृश्य के बजाय आंशिक दृश्य पर div टैग था इस त्रुटि संदेश मिला

+1

और इसका क्या अर्थ है? – AaA

+1

यह खराब समझाया गया है, लेकिन मान्य है। एमवीसी में, मेरे आंशिक दृश्य पर संवाद के लिए मेरे पास div div था। जब मैंने मूल पृष्ठ पर युक्त div टैग को स्थानांतरित किया, तो संवाद ठीक से काम करता था। – Paulj

2

आप जब संवाद आरंभ नहीं हो जाता या पेज के लिए तैयार है तुरंत संवाद खोलना चाहते हैं, तो आप भी कर सकते हैं संवाद का विकल्प वस्तु में true पैरामीटर autoOpen सेट:

var opt = { 
     autoOpen: true, 
     modal: true, 
     width: 550, 
     height:650, 
     title: 'Details' 
}; 

इस प्रकार, आप कॉल करने के लिए `$ (" # divDialog ") की जरूरत नहीं है संवाद (" खुला ");।

जब संवाद ऑब्जेक्ट प्रारंभ होता है, तो संवाद स्वचालित रूप से खोला जाता है।

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