बूटस्ट्रैप मोडल विंडो को पूरी तरह से कैसे नष्ट करें?


83

मैंने विज़ार्ड कार्यान्वयन के लिए मोडल विंडो का उपयोग किया है जिसमें लगभग 4,5 चरण हैं। मुझे पृष्ठ को ताज़ा किए बिना अंतिम चरण (onFinish) और OnCancel चरण के बाद इसे पूरी तरह से नष्ट करने की आवश्यकता है । मैं बेशक इसे छिपा सकता हूं, लेकिन मोडल विंडो को छुपाना सब कुछ इस तरह से पुनर्स्थापित करता है जब मैं इसे फिर से खोलता हूं। किसी को भी इस मुद्दे पर मेरी मदद कर सकता है?

धन्यवाद किसी भी संकेत के जवाब मेरे लिए उपयोगी हैं।


2
आप jQuery या कुछ इसी तरह का उपयोग कर रहे हैं? करने में सक्षम हो सकता है $(modal_selector).remove()
रॉबब्रिट

धन्यवाद, मुझे जांचने दो कि यह काम करता है या नहीं।
अक्की

धन्यवाद यह काम करता है, लेकिन यह तब होता है जब हम Rev = invoke dont को modal.show () द्वारा मंगवाते हैं .. फिर इसे कैसे रिवाइव करें?
अक्की

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

यह इस बात पर निर्भर करता है कि आप मोडल में क्या प्रदर्शित कर रहे हैं। ट्विटर बूटस्ट्रैप केवल मोडल के प्रदर्शन को संभालता है, इसमें जो कुछ भी है वह आपकी जिम्मेदारी है।
रॉबब्रिट

जवाबों:


122

अगर बूटस्ट्रैप 3 है तो आप इसका उपयोग कर सकते हैं:

$("#mimodal").on('hidden.bs.modal', function () {
    $(this).data('bs.modal', null);
});

8
हर दूसरे जवाब के रूप में, यह पृष्ठभूमि को हटाने के लिए नहीं लगता है।
htulipe

1
@htulipe दृष्टिकोण सही है लेकिन यह मोडल पर संक्रमण प्रभाव के साथ काम नहीं करेगा। आपको इसे काम करने के लिए मोडल से .fade क्लास को निकालना होगा।
ड्रिलिंग

4
@drillingman: +1 जो मेरे लिए काम करते थे:$("#mimodal").removeClass('fade').modal('hide')
जॉन गीत्ज़ेन

5
मेरे लिए काम करने वाले बीएस 3 में केवल एक चीज थी:$(this).html("");
रयान कुर्राह

1
आप इसे पूरी तरह से कैसे हटाते हैं? @ फोनिक्स
एलेक्सियोवे

41

नोट: यह समाधान केवल संस्करण 3 से पहले बूटस्ट्रैप के लिए काम करता है। बूटस्ट्रैप 3 उत्तर के लिए, user2612497 द्वारा इसे देखें

आप क्या करना चाहते हैं:

$('#modalElement').on('hidden', function(){
    $(this).data('modal', null);
});

हर बार दिखाए जाने के बाद मोडल खुद को इनिशियलाइज़ करने का कारण बनेगा। इसलिए यदि आप डिव में या जो कुछ भी लोड करने के लिए रिमोट कंटेंट का उपयोग कर रहे हैं, वह इसे खोले जाने के बाद फिर से करेगा। आप हर बार छिपाए जाने के बाद मोडल उदाहरण को नष्ट कर रहे हैं।

या जब भी आप तत्व को नष्ट करने को ट्रिगर करना चाहते हैं (यदि यह वास्तव में हर बार जब आप इसे छिपाते हैं तो नहीं होता) तो आपको सिर्फ मध्य रेखा को कॉल करना होगा:

$('#modalElement').data('modal', null);

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

उम्मीद है की वो मदद करदे।


5
यह वास्तव में थोड़ा अलग तरीके से काम करता है लेकिन $("#modalElement").removeData("modal"); मैं बूटस्ट्रैप 2.3.1 और jQuery 1.9.1 का उपयोग कर रहा हूं
tlavarea

5
यदि आप बूटस्ट्रैप 3 का उपयोग करते हैं, तो आपको ईवेंट के hidden.bs.modalबजाय सुनना चाहिए hiddengetbootstrap.com/javascript/#modals
रोमेन पॉलस

19

3.x संस्करण के लिए

$( '.modal' ).modal( 'hide' ).data( 'bs.modal', null );

2.x संस्करण के लिए (जोखिम भरा; नीचे दी गई टिप्पणियों को पढ़ें) जब आप बूटस्ट्रैप मोडल तीन तत्वों को बनाते हैं तो आपके पेज को बदला जा सकता है। इसलिए यदि आप सभी परिवर्तनों को पूरी तरह से रोलबैक करना चाहते हैं, तो आपको इसे प्रत्येक के लिए मैन्युअल रूप से करना होगा।

$( '.modal' ).remove();
$( '.modal-backdrop' ).remove();
$( 'body' ).removeClass( "modal-open" );

मैन्युअल चरणों का उपयोग करना एक जोखिम भरा दृष्टिकोण है, क्योंकि बूटस्ट्रैप कोड बदल सकता है और आप कुछ पहलुओं को याद कर सकते हैं। जांच के लिए, कम से कम बूटस्ट्रैप 3.2 में छुपा स्क्रॉलबार के लिए खाते में style="padding-right: 17px;"सेट किया जाएगा body। नीचे पंक्ति: बूटस्ट्रैप एपीआई का उपयोग करें जो v3 में होगा $('.modal').modal('hide').data('bs.modal', null);
ओलिवर

हाँ, तुम सही हो। यह 2.x संस्करण के लिए लिखा गया था। अपडेट किया गया।
zelibobla

यदि आपका गतिशील रूप से डेटा को मोडल में इंजेक्ट कर रहा है और आप अपने उत्तर के दूसरे भाग को हटा देते हैं तो यह ज़रूरत से ज़्यादा बंद हो जाएगा। मोड्यूल के पुन: उपयोग की बात से परे। यदि यह आपकी विशिष्ट class.remove () का उपयोग करने में सुझाव देता है;
19

13

आप इस तरह से पृष्ठ पुनः लोड किए बिना एक मोडल को पूरी तरह से नष्ट कर सकते हैं।

$("#modal").remove();
$('.modal-backdrop').remove();

लेकिन यह आपके html पेज से पूरी तरह से मोडल को हटा देगा। इसके बाद मोडल हाइड शो नहीं चलेगा।


.remove () इसे पूरी तरह से हटा देता है। और .show () किसी भी अधिक काम नहीं करता है। मैं इसे फिर से शुरू करने के लिए क्या करूं?
geeky_monster

बूटस्ट्रैप मोडल बनाने के बाद से bodyसुझाए गए समाधान में परिवर्तन करें, सभी परिवर्तनों को वापस रोल नहीं करेगा।
zelibobla

2
यह काम नहीं करेगा, क्योंकि पृष्ठभूमि फंस जाएगी, यह भी क्यों उठ गया?
codenamezero

5

मैंने स्वीकृत उत्तर देने की कोशिश की है, लेकिन यह मेरे अंत में काम नहीं कर रहा है और मुझे नहीं पता कि स्वीकृत उत्तर कैसे काम करता है।

$('#modalId').on('hidden.bs.modal', function () {
  $(this).remove();
})

यह मेरी तरफ से पूरी तरह से ठीक काम कर रहा है। बीएस संस्करण> 3


यह एक ग्रे पृष्ठभूमि छोड़ देता है और साथ ही वेब पेज को अनुपयोगी छोड़ देता है !!
बीजू

4

JQuery की शक्ति। $(selector).modal('hide').destroy();सबसे पहले आप यह बताएंगे कि आपके पास फिसलने का प्रभाव हो सकता है और फिर तत्व को पूरी तरह से हटा देता है, हालाँकि यदि आप चाहते हैं कि उपयोगकर्ता चरणों को पूरा करने के बाद फिर से मोडल खोलने में सक्षम हों। आप केवल उन सेटिंग्स को अपडेट कर सकते हैं, जिन्हें आप रीसेट करना चाहते हैं, इसलिए अपने मोडल के सभी इनपुट रीसेट करने के लिए यह इस तरह दिखेगा:

$(selector).find('input, textarea').each(function(){
   $(this).val('');
});

3

जो मैं समझता हूं, आप उसे हटाना नहीं चाहते हैं, न ही उसे छिपाना चाहते हैं। क्योंकि आप इसे बाद में पुन: उपयोग करना चाहते हैं .. लेकिन अगर आप इसे फिर से खोलते हैं तो यह पुरानी सामग्री नहीं चाहते हैं?

<div class="modal hide fade">
    <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times</button>
        <h3>Modal header</h3>
    </div>
    <div class="modal-body">
        <p>One fine body…</p>
    </div>
    <div class="modal-footer">
        <a href="#" class="btn">Close</a>
        <a href="#" class="btn btn-primary">Save changes</a>
    </div>
</div>

यदि आप इसे एक गतिशील टेम्पलेट के रूप में उपयोग करना चाहते हैं, तो कुछ ऐसा करें

$(selector).modal({show: true})

....

$(selector).modal({show: false})
$(".modal-body").empty()

....

$(".modal-body").append("new stuff & text")
$(selector).modal({show: true})

3

बूटस्ट्रैप 3 + jquery 2.0.3:

$('#myModal').on('hide.bs.modal', function () {
   $('#myModal').removeData();
})

1
बूटस्ट्रैप मोडल बनाने के बाद से bodyसुझाए गए समाधान में परिवर्तन करें, सभी परिवर्तनों को वापस रोल नहीं करेगा।
zelibobla

3

यदि आपके मोडल में कोई iframe है, तो आप निम्न कोड द्वारा इसकी सामग्री को निकाल सकते हैं:

$('#myModal').on('hidden.bs.modal', function(){
   $(this).find('iframe').html("");
   $(this).find('iframe').attr("src", "");
});

यह वह था जिसने मेरी मदद की;) इसलिए मुझे इसे रोकने के लिए एक एपीआई की आवश्यकता नहीं थी
एलेक्सा एड्रियन

2

मेरा दृष्टिकोण clone()jQuery की विधि का उपयोग करना होगा । यह आपके तत्व की एक प्रति बनाता है, और यही आप चाहते हैं: आपके पहले अनलॉक्ड मोडल की एक प्रति, जिसे आप अपनी इच्छा से बदल सकते हैं: डेमो (jsfiddle)

var myBackup = $('#myModal').clone();

// Delegated events because we make a copy, and the copied button does not exist onDomReady
$('body').on('click','#myReset',function() {
    $('#myModal').modal('hide').remove();
    var myClone = myBackup.clone();
    $('body').append(myClone);
});

मेरे द्वारा उपयोग किया जाने वाला मार्कअप सबसे बुनियादी है, इसलिए आपको केवल सही तत्वों / घटनाओं पर बांधने की जरूरत है, और आपके पास अपना विज़ार्ड रीसेट होना चाहिए।

प्रत्यायोजित घटनाओं के साथ बाँधने के लिए सावधान रहें , या प्रत्येक में अपने मॉडल के आंतरिक तत्वों को रीसेट करें ताकि प्रत्येक नया मोडल उसी तरह व्यवहार करे।



1

मेरे पास एक ही परिदृश्य था जहां मैं एक बटन क्लिक पर एक नया मोडल खोलूंगा। एक बार हो जाने के बाद, मैं इसे अपने पेज से पूरी तरह से हटा देना चाहता हूं ... मैं मोडल को हटाने के लिए रिमूव का उपयोग करता हूं .. बटन पर क्लिक करने पर मैं जांचता हूं कि क्या मोडल मौजूद है, और अगर सही है तो मैं इसे नष्ट कर दूंगा और एक नया मोडल बनाऊंगा।

$("#wizard").click(function() {
    /* find if wizard is already open */
    if($('.wizard-modal').length) {
        $('.wizard-modal').remove();
    }
});

1
$('#myModal').on('hidden.bs.modal', function () {
      $(this).data('bs.modal', null).remove();
});

//Just add .remove(); 
//Bootstrap v3.0.3

हालांकि यह कोड, वास्तव में, समस्या का समाधान हो सकता है, आम तौर पर यह एक अच्छा विचार है कि जब आप किसी प्रश्न का उत्तर देते हैं, तो उसका विवरण शामिल करना एक अच्छा विचार है।
सेबेस्टियन लेनार्टोविज़

ठीक। मैं जल्दी में था ... वैसे भी ".remove (); जोड़ें" अपने बूटस्ट्रैप मोडल के सभी संदर्भ और HTML कोड निकालने के लिए।
लुका डि लेनार्डो

1

यह डोम से पूरी तरह से मोडल को हटा देता है, "एप्लाइड" मॉडल्स के लिए भी काम कर रहा है।

#pickoptionmodal मेरे मोडल विंडो की आईडी है।

$(document).on('hidden.bs.modal','#pickoptionmodal',function(e){

e.preventDefault();

$("#pickoptionmodal").remove();

});

इसके बाद क्या मोडल फिर से इनिशियलाइज़ हो सकता है?
rahim.nagori

@ rahim.nagori जैसा कि वर्णन में लिखा गया है कि डीओएम से मोडल को हटा रहा है, आप इसे फिर से जोड़ सकते हैं ... मोडल को बंद नहीं कर रहा है, उसे हटा रहा है, थ्रेड पूरी तरह से मोडल विंडो को नष्ट करने वाला है।
अलीन रज़वान

1

बटन क्लिक के माध्यम से बंद होने के बाद मुझे मोडल को नष्ट करना होगा, और इसलिए मैं निम्नलिखित के साथ आया।

$("#closeModal").click(function() {
    $("#modal").modal('hide').on('hidden.bs.modal', function () {
        $("#modal").remove();
    });
});

ध्यान दें कि यह बूटस्ट्रैप 3 के साथ काम करता है।


1
यह एक ग्रे पृष्ठभूमि छोड़ देता है और साथ ही वेब पेज को अनुपयोगी छोड़ देता है !!
बीजू

1

बूटस्ट्रैप 4.x पर भी काम करता है

$('#modal_ID').modal( 'hide' ).data( 'bs.modal', null );

यह मोडल को नष्ट कर देता है लेकिन एक ग्रे बैकड्रॉप छोड़ देता है जो वेब पेज को अनुपयोगी बनाता है
बीजू

किस बूटस्ट्रैप संस्करण में आपने इसे आज़माया?
क्रिस्टियन घिरबा

0

यदि मोडल छाया गहरा रहता है और एक से अधिक मोडल दिखाने के लिए नहीं जा रहा है तो यह मददगार होगा

$('.modal').live('hide',function(){
    if($('.modal-backdrop').length>1){
        $('.modal-backdrop')[0].remove();
    }
});

1
लाइव पुराना है, जिस तत्व को आप लक्षित कर रहे हैं उस पर और [0] के साथ प्रतिस्थापित किया जाना आवश्यक नहीं है यदि आप jQuery का उपयोग कर रहे हैं। इसके अलावा, यदि आप पूरी तरह से पृष्ठभूमि को हटाते हैं, तो ध्यान दें कि आपको इसे वापस जोड़ना पड़ सकता है ... कोशिश करें: $(document).on('hidden.bs.modal', '.modal', function(e) { if ($('.modal-backdrop').length) { $('.modal-backdrop').remove(); } });
थॉमस बेनेट

0

मुझे अलग-अलग लिंक क्लिक के लिए समान मोडल का उपयोग करना था। मैंने छिपा कॉलबैक में केवल html सामग्री को मोडल के खाली "" के साथ बदल दिया।


0

इसने मेरे लिए काम किया।

$('.modal-backdrop').removeClass('in');
$('#myDiv').removeClass('in');

संवाद और पृष्ठभूमि चली गई, लेकिन अगली बार जब मैंने बटन पर क्लिक किया तो वे वापस आ गए।


0

यह बूटस्ट्रैप v3.3.6 के लिए काम करता है

$('#dialog').modal()
.on('hide.bs.modal', function () {
    // Some Code
}).on('shown.bs.modal', function () {
    // Some Code
}).on('hidden.bs.modal', function () {
    $("#dialog").off();
});

0

केवल इसने मेरे लिए काम किया

$('body').on('hidden.bs.modal', '.modal', function() {
    $('selector').val('');
});

यह चयनकर्ताओं को उन्हें खाली करने के लिए मजबूर करता है क्योंकि बूटस्ट्रैप और jquery संस्करण इस समस्या का कारण हो सकता है


यह एक ग्रे पृष्ठभूमि छोड़ देता है और साथ ही वेब पेज को अनुपयोगी छोड़ देता है !!
बीजू


-1

यूआई-राउटर के साथ यह आपके लिए एक विकल्प हो सकता है। अगली बार आग लगने से पहले यह मोडल कंटेंट को फिर से जोड़ देता है इसलिए यह कंट्रोलर को बंद कर देता है।

$("#myModalId").on('hidden.bs.modal', function () {
  $state.reload();  //resets the modal
});

-4

मुझे नहीं पता कि यह कैसे लग सकता है लेकिन मेरे लिए यह काम ………।

$("#YourModalID").modal('hide');

डाउनवोट किया गया क्योंकि यह केवल उस मोडल को छुपाता है जो स्पष्ट रूप से नहीं पूछा गया था।
एलेक्सियोवे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.