2010-05-19 10 views
118

पर एक संवाद को पूरी तरह से कैसे हटाएं जब कोई AJAX ऑपरेशन विफल हो जाता है, तो मैं त्रुटियों के साथ एक नया div बना देता हूं और फिर इसे एक संवाद के रूप में दिखाता हूं। जब संवाद बंद हो जाता है तो मैं पूरी तरह से div को नष्ट करना और निकालना चाहता हूं। मैं यह कैसे कर सकता हूँ? मेरे कोड इस समय इस तरह दिखता है:jquery: करीब

$('<div>We failed</div>') 
    .dialog(
    { 
     title: 'Error', 
     close: function(event, ui) 
     { 
      $(this).destroy().remove(); 
     } 
    }); 

जब मैं इस डायलॉग बॉक्स ठीक से दिखाई देता चलाने के लिए, लेकिन जब मैं इसे बंद संवाद अभी भी एचटीएमएल (Firebug का उपयोग) में दिख रहा है। मुझे यहां क्या समझ नहीं आ रहा है? मैं कुछ भूल गया हूँ?

अद्यतन: बस ध्यान दिया कि मेरा कोड मुझे फायरबग कंसोल में एक त्रुटि देता है।

$ (इस) .destroy एक समारोह

किसी को भी मेरी मदद करने में सक्षम नहीं है?

अद्यतन: यदि मैं इसके बजाय $(this).remove() करता हूं, तो आइटम HTML से हटा दिया जाता है। लेकिन क्या यह पूरी तरह से डीओएम से हटा दिया गया है? या क्या मुझे किसी भी तरह कॉल करने की ज़रूरत है कि पहले भी कार्य को नष्ट कर दें?

उत्तर

239
$(this).dialog('destroy').remove() 

इस संवाद को नष्ट कर देगा और उसके बाद डोम

+3

Oooooh। ठीक है ... * चेहरे * धन्यवाद !! – Svish

+0

ध्यान दें कि '.destroy' यूआई फ्रेमवर्क (टाइटलबार, क्लोजबटन, रेजिज़बार इत्यादि) द्वारा जोड़े गए बाहरी मार्कअप को हटा देता है। शायद यही है जिसका मतलब आप _host_ द्वारा किया था। –

+3

एफएफ के साथ और फ़ायरबग के साथ इसका उपयोग करने के लिए बेकार। यह दुर्घटनाग्रस्त हो जाएगा। https://code.google.com/p/fbug/issues/detail?id=6290 मैंने घंटों बिताए ... यह पता लगाने के लिए कि मेरे कोड में क्या गलत है। –

9

से पूरी तरह से div था कि "की मेजबानी" संवाद को दूर क्यों आप इसे दूर करने के लिए करना चाहते हैं?

यह कई उदाहरण बनाया जा रहा रोकने के लिए है, तो सिर्फ निम्नलिखित दृष्टिकोण का उपयोग करें ...

$('#myDialog') 
    .dialog( 
    { 
     title: 'Error', 
     close: function(event, ui) 
     { 
      $(this).dialog('close'); 
     } 
    }); 

और जब त्रुटि तब होती है, आप क्या करेंगे ...

$('#myDialog').html("Ooops."); 
$('#myDialog').dialog('open'); 
+0

मैंने सोचा कि यह आसान होगा, क्योंकि इसमें एजेक्स कॉल से वापस आने के आधार पर अलग-अलग सामग्री होगी। और div भी स्थिर नहीं है जैसा कि मैंने अपने उदाहरण में दिखाया है लेकिन http://github.com/nje/jquery-tmpl प्लगइन द्वारा प्रस्तुत किया गया है। यदि आपके पास संवाद की सामग्री को स्वैप करने का एक अच्छा तरीका है, तो मुझे यह देखने में दिलचस्पी होगी :) – Svish

+0

ठीक है, मेरे उदाहरण में, मैं संवाद div के साथ एक स्ट्रिंग को डंप करने के बेहद सरल विकल्प के साथ गया: $ ('#myDialog') एचटीएमएल ("ओह।")।; आप संवाद div में किसी उप-नियंत्रण की सामग्री को बदलने के लिए इसे संशोधित भी कर सकते हैं। –

+0

यह एक अच्छा दृष्टिकोण नहीं है क्योंकि सभी संवाद विकल्प #myDialog पर बने रहेंगे जबतक कि आप उन्हें विशेष रूप से ओवरराइड नहीं करते। दूसरा संवाद (हमेशा) एक ही बटन, ऊंचाई, आदि नहीं होना चाहिए .. पहले के रूप में। –

2

एक बदसूरत समाधान है कि मेरे लिए एक आकर्षण की तरह काम करता है:

$("#mydialog").dialog(
    open: function(){ 
     $('div.ui-widget-overlay').hide(); 
     $("div.ui-dialog").not(':first').remove(); 
} 
}); 
+4

अजीब तरह से यह काम कर रहा है। आप संवाद खोलें और तुरंत इसे हटा दें ... – Dementic

8
$(dialogElement).empty(); 

$(dialogElement).remove(); 
,210

यह असली

+0

मेरे लिए काम करता है! धन्यवाद! – MiBol

1

के लिए यह ठीक करता है आप उपयोग कर सकते हैं

$(dialogElement).empty();  
$(dialogElement).remove(); 
0

इस के लिए मुझे

$('<div>We failed</div>') 
    .dialog(
    { 
     title: 'Error', 
     close: function(event, ui) 
     { 
      $(this).dialog("close"); 
      $(this).remove(); 
     } 
    }); 

चीयर्स काम किया है!

पीएस: मुझे कुछ ऐसी ही समस्या थी और उपरोक्त दृष्टिकोण ने इसे हल किया।

+1

आप करीबी कॉलबैक के भीतर से बंद विधि को बुला रहे हैं! jQuery यूआई इस द्वारा सुझाए गए अनंत लूप को रोकने के लिए पर्याप्त स्मार्ट है, लेकिन यह अभी भी अनावश्यक है, और मैं निश्चित रूप से इसे सुरुचिपूर्ण नहीं मानूंगा। – Elezar

+0

उत्तर लिखने के समय, '$ (यह) .dialog (" बंद करें ") के बिना, 'संवाद, बस दूर नहीं जा सका। समय पर jQuery बहुत अजीब है। –

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