jquery ui संवाद: आरंभ से पहले संवाद पर तरीकों को कॉल नहीं कर सकता


101

मेरे पास jquery पर एक ऐप है जिसमें डायलॉग्स के साथ 1.5 काम किया गया है। जबकि मेरे पास बहुत सारे .live हैंडलर हैं, मैंने इसे .on में बदल दिया है। उसके लिए, मुझे jquery (अब 1.8.3 एक jquerui 1.9.1) को अपडेट करना होगा।

अब, मुझे मिल गया: Error: cannot call methods on dialog prior to initialization; attempted to call method 'close'

निम्नलिखित कोड है:

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

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

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

HTML कोड

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

किसी भी विचार क्यों यह हो रहा हो सकता है?

जवाबों:


136

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

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

आप भी कर सकते हैं:

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

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


5
इसने मेरे लिए काम किया। क्या मुझे हर बार डायलॉग को इनिशियलाइज़ करना है, मैं इसे इस तरह से खोलना चाहता हूँ या केवल पहली बार? कई संवाद हैं। क्या विकल्प इनिशियल सेट करने का कोई तरीका नहीं है और फिर बटन द्वारा संवाद खोलें?
core-chain.io

6
मैंने पाया कि इस समाधान ने "पहले कॉल डायलॉग्स ऑन डायलॉग को इनिशियलाइज़ करने से पहले हल नहीं किया था; मेथड 'ओपन' कॉल करने का प्रयास किया" त्रुटि तब होती है जब कोई डायलॉग सफलतापूर्वक खोला, बंद किया जाता है, और फिर उपयोगकर्ता दूसरी बार डायलॉग खोलने का प्रयास करते हैं । धन्यवाद @ZOD
स्पैग्लिव्स

आपने +1 किया, क्योंकि इससे मेरी समस्या ठीक हो गई, लेकिन क्या आप बता सकते हैं कि यह क्यों काम करता है?
इगोर एल।

2
@IgorLacik मैं मानता हूं कि .dialog () स्वयं का एक उदाहरण देता है जिससे आप चाइनिंग कर सकते हैं। इसलिए .dialog (ऑप्ट)। Dialog ('ओपन') एक डायलॉग ऑब्जेक्ट (पहला कॉल) को इंस्टेंट करता है और फिर उस पर 'ओपन' करता है। मुझे लगता है कि तब कॉलिंग $ (obj) .dialog (ऑप्ट) और फिर $ (obj) .dialog ('ओपन') बाद में jquery ऑब्जेक्ट पर अलग-अलग डायलॉग ऑब्जेक्ट्स को इंस्टेंट कर देगा, इसलिए 2 को पहले एक को देखने के लिए नहीं मिलता है। कॉन्फ़िगरेशन विकल्प। डायलॉग कोड में और अधिक बदलाव किए बिना, यह सुनिश्चित करने के लिए कहना मुश्किल है, और मैं उस के लिए समय नहीं है: D
nealio82

आपने जो समझाने की कोशिश की, उसे समझाने के लिए मेरे पास सवाल है।
जटबी

23

यदि आप 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कोई प्रदर्शन समस्या का कारण बनता है। सभी संवादों पर वैश्विक नज़दीकी किए बिना इसके आसपास काम करने के अन्य तरीके हैं।


10

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


4
मैंने अपने jquery ui संस्करण को 1.9.2 में अपग्रेड करके इस समस्या को हल किया और फिर इसने काम किया। तो, jquery ui 1.9.2 के साथ jquery 1.9.1 ऊपर की त्रुटि से छुटकारा दिलाता है।
जोंथेप्रिन्योर

4

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

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

और यदि आप डायलॉग में MVC आंशिक दृश्य खोलते हैं, तो आप एक छिपे हुए बटन को इंडेक्स में बना सकते हैं और JQUERY क्लिक इवेंट:

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

तब आंशिक दृश्य HTML के अंदर आप बटन ट्रिगर कहते हैं जैसे क्लिक करें:

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

फिर मिलेंगे।


2

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

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

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

जब डायलॉग ऑब्जेक्ट को इनिशियलाइज़ किया जाता है, तो डायलॉग अपने आप खुल जाता है।


2

नया jQuery यूआई संस्करण आपको डायलॉग पर यूआई विधियों को कॉल करने की अनुमति नहीं देगा जो कि आरंभीकृत नहीं है। वर्कअराउंड के रूप में, आप नीचे दिए गए चेक का उपयोग करके देख सकते हैं कि संवाद जीवित है या नहीं।

if (modalDialogObj.hasClass('ui-dialog-content')) {
    // call UI methods like modalDialogObj.dialog('isOpen')
} else {
    // it is not initialized yet
}


0

मुझे बस पेज में ScriptManager जोड़ना था। मसला हल हो गया।


0

मेरे मामले में समस्या यह थी कि मैंने $("#divDialog").removeData();संवाद के भीतर अपने प्रपत्र डेटा को रीसेट करने के हिस्से के रूप में बुलाया था ।

इसके परिणामस्वरूप मुझे एक डेटा संरचना को मिटा दिया गया, uiDialogजिसका अर्थ था कि संवाद को फिर से संगठित करना था।

मैंने .removeData()अधिक विशिष्ट विलोपों के साथ प्रतिस्थापित किया और सब कुछ फिर से काम करना शुरू कर दिया।


0

मेरा मामला अलग है, यह ' इस ' के दायरे के कारण विफल है :

//this fails:
$("#My-Dialog").dialog({
  ...
  close: ()=>{
    $(this).dialog("close");
  }
});

//this works:
$("#My-Dialog").dialog({
  ...
  close: function(){
    $(this).dialog("close");
  }
});

-1

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


1
और इसका वास्तव में क्या मतलब है?
AAA

1
यह खराब तरीके से समझाया गया है, लेकिन वैध है। एमवीसी में, मेरे आंशिक दृश्य पर संवाद के लिए युक्त div टैग था। जब मैंने युक्त div टैग को पैरेंट पेज पर स्थानांतरित किया, तो संवाद ठीक से काम करता था।
पॉल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.