मोडल को बंद करने के लिए बूटस्ट्रैप मोडल क्षेत्र के बाहर क्लिक करें


440

मैं एक बूटस्ट्रैप वेबसाइट बना रहा हूं, जिसमें बूटस्ट्रैप 'मॉडल्स' की एक जोड़ी है। मैं कुछ डिफ़ॉल्ट सुविधाओं को अनुकूलित करने की कोशिश कर रहा हूं।

समस्या यह है; आप पृष्ठभूमि पर क्लिक करके मोडल को बंद कर सकते हैं। इस सुविधा को अक्षम करने के लिए वैसे भी क्या है? केवल विशिष्ट modals पर?

बूटस्ट्रैप मोडल पेज


क्या आप मुझे बता सकते हैं कि इस घटना को किस स्थिति में कहा जाता है। $ स्कोप.ओक, $ स्कोप। बर्खास्तगी। मुझे बर्खास्त करने और निरस्त करने के लिए लागू किया गया है, लेकिन मुझे नहीं पता कि इस स्थिति में गोलीबारी हुई।
लवटोडकोड

जवाबों:


912

विकल्प अध्याय में, आपके द्वारा लिंक किए गए पृष्ठ में, आप backdropविकल्प देख सकते हैं । इस विकल्प को मूल्य के साथ पास 'static'करने से मोडल को बंद करने से रोका जा सकेगा।
जैसा कि @PedroVagner ने टिप्पणियों में बताया है, आप {keyboard: false}दबाकर मोडल को बंद करने से भी रोक सकते हैं Esc

यदि आप js के उपयोग से मोडल खोल रहे हैं:

$('#myModal').modal({backdrop: 'static', keyboard: false})  

यदि आप डेटा विशेषताओं का उपयोग कर रहे हैं, तो उपयोग करें:

 <button data-target="#myModal" data-toggle="modal" data-backdrop="static" data-keyboard="false">
    Launch demo modal
 </button>`

क्या पृष्ठभूमि को अन्य नियंत्रणों के लिए क्लिकों को पंजीकृत करने में सक्षम रखने का एक तरीका है लेकिन सिर्फ मॉडल्स को बंद नहीं करना है?
विवेकानंद

2
@mystikacid आपको उसके लिए एक नया प्रश्न पूछना चाहिए। आपकी समस्या और अन्य उपयोगकर्ताओं के साथ एक समान समाधान खोजने में आपकी मदद करना बेहतर होगा।
डोगुइता


3
एक सरल लेकिन परेशान करने वाली समस्या थी, सुनिश्चित करें कि आप इससे पहले $('#modal').modal('show');कि यह मदद करता है jquery लाइन रखें !
cwiggo

3
cwiggo आप modal $ ('# modal') का उपयोग नहीं करते हैं। modal ('show'); - आप बस .modal ({बैकड्रॉप: 'स्टेटिक', कीबोर्ड: गलत}) का उपयोग करते हैं - बिना किसी शो या टॉगल कमांड के
TV-C-15

135

यह सबसे आसान है

आप अपने मोडल व्यवहार को परिभाषित कर सकते हैं, डेटा-कीबोर्ड और डेटा-बैकड्रॉप को परिभाषित कर सकते हैं।

<div id="modal" class="modal hide fade in" data-keyboard="false" data-backdrop="static">

2
यह केवल एक चीज है जो मेरे लिए काम करती है। जेएस में विकल्पों में पास करना सीधे तौर पर मेरे लिए किसी कारण से काम नहीं करता था (संस्करण 3.3.7)। अगर किसी और ने पुष्टि की है, तो मैं बूटस्ट्रैप टीम के साथ एक मुद्दा खोल सकता हूं।
dchacke

सबसे पहले, js संस्करण का उपयोग करना मेरे लिए भी काम नहीं करता था क्योंकि मैं मोडल खोलने के बाद सब कुछ सेट कर रहा था। आपको यह "$ ('# modalForm') करना चाहिए। मोडल ({पृष्ठभूमि: 'स्थिर', कीबोर्ड, गलत});" इससे पहले "$ ('# modalForm')। मोडल ('शो');"। लेकिन मेरे लिए, सबसे अच्छा जवाब @ me
लुकास

इसने मेरे लिए काम किया। लाना data-backdrop="static"मोडल परिभाषा नहीं ट्रिगर बटन अन्य उत्तर में विनिर्दिष्ट मोडल खुलती, मेरे लिए काम किया पर विकल्प।
TSmith

99

आप इस तरह की एक विशेषता का उपयोग कर सकते हैं: data-backdrop="static"या जावास्क्रिप्ट के साथ:

$('#myModal').modal({
    backdrop: 'static',
    keyboard: false  // to prevent closing with Esc button (if you want this too)
})

इस उत्तर को भी देखें: ट्विटर बूटस्ट्रैप मोडल विंडो को बंद करने से हटाएं


<div id = "modal" class = "modal hide fade in" data-keyboard = "false" data-backdrop = "static"> यह सर्वोत्तम उत्तर है।
कमलेश

34

अपने आवेदन में, मैं jQuery के माध्यम से बूटस्ट्रैप मोडल दिखाने के लिए नीचे दिए गए कोड का उपयोग कर रहा हूं।

 $('#myModall').modal({
                        backdrop: 'static',
                        keyboard: true, 
                        show: true
                }); 

यह अच्छा जवाब है क्योंकि यह कोड केवल तभी काम करेगा जब मोडल खुला होगा।
दीपक ढोलियान

32

आप उपयोग कर सकते हैं

$.fn.modal.prototype.constructor.Constructor.DEFAULTS.backdrop = 'static';
$.fn.modal.prototype.constructor.Constructor.DEFAULTS.keyboard =  false;

डिफ़ॉल्ट व्यवहार को बदलने के लिए।


शानदार जवाब, क्योंकि यह सभी मॉडल्स के लिए स्थिति को संभालता है।
हारिस उर रहमान

1
बूटस्ट्रैप v4 में, वाक्यविन्यास है: $ .fn.modal.prototype.constructor.Constructor.Default.backdrop = 'static';
गैरी अंग्रेजी

11

मोडल को बंद करने के लिए बूटस्ट्रैप मॉडल क्षेत्र के बाहर क्लिक को अक्षम करने के दो तरीके हैं-

  1. जावास्क्रिप्ट का उपयोग करना

    $('#myModal').modal({
       backdrop: 'static',
       keyboard: false
    });
  2. HTML टैग में डेटा विशेषता का उपयोग करना

    data-backdrop="static" data-keyboard="false" //write this attributes in that button where you click to open the modal popup.

9

इसकी जांच करो ::

$(document).ready(function() {
    $("#popup").modal({
        show: false,
        backdrop: 'static'
    });
    
    $("#click-me").click(function() {
       $("#popup").modal("show");             
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="http://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.1/css/bootstrap.css" rel="stylesheet"/>
<script src="http://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.1/js/bootstrap.min.js"></script>
<!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.1.0/css/bootstrap-combined.min.css" rel="stylesheet">
        </head>
    <body>
        <div class="modal" id="popup" style="display: none;">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                <h3>Standard Selectpickers</h3>
            </div>
            <div class="modal-body">
                
                <select class="selectpicker" data-container="body">
                    <option>Mustard</option>
                    <option>Ketchup</option>
                    <option>Relish</option>
                </select>

            </div>
            <div class="modal-footer">
                <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
                <button class="btn btn-primary">Save changes</button>
            </div>
        </div>
        <a id="click-me" class="btn btn-primary">Click Me</a> 
    </body>
        <script type="text/javascript" src="//netdna.bootstrapcdn.com/twitter-bootstrap/2.1.0/js/bootstrap.min.js"></script>
</html>


6

एक अन्य विकल्प यदि आप नहीं जानते हैं कि क्या मोडल पहले ही खोला जा चुका है या नहीं है और आपको मोडल विकल्पों को कॉन्फ़िगर करने की आवश्यकता है:

बूटस्ट्रैप 3.4

var $modal = $('#modal');
var keyboard = false; // Prevent to close by ESC
var backdrop = 'static'; // Prevent to close on click outside the modal

if(typeof $modal.data('bs.modal') === 'undefined') { // Modal did not open yet
    $modal.modal({
        keyboard: keyboard,
        backdrop: backdrop
    });
} else { // Modal has already been opened
    $modal.data('bs.modal').options.keyboard = keyboard;
    $modal.data('bs.modal').options.backdrop = backdrop;

    if(keyboard === false) { 
        $modal.off('keydown.dismiss.bs.modal'); // Disable ESC
    } else { // 
        $modal.data('bs.modal').escape(); // Resets ESC
    }
}

बूटस्ट्रैप 4.3+

var $modal = $('#modal');
var keyboard = false; // Prevent to close by ESC
var backdrop = 'static'; // Prevent to close on click outside the modal

if(typeof $modal.data('bs.modal') === 'undefined') { // Modal did not open yet
    $modal.modal({
        keyboard: keyboard,
        backdrop: backdrop
    });
} else { // Modal has already been opened
    $modal.data('bs.modal')._config.keyboard = keyboard;
    $modal.data('bs.modal')._config.backdrop = backdrop;

    if(keyboard === false) { 
        $modal.off('keydown.dismiss.bs.modal'); // Disable ESC
    } else { // 
        $modal.data('bs.modal').escape(); // Resets ESC
    }
}

विकल्पों को _config में बदलें


बूटस्ट्रैप के लिए 4 + के _setEscapeEvent()बजाय होना चाहिए .escape()?
इवान बाकर

@IvanBacher .escape ()
Cava

5

मेरे लिए काम करने वाला समाधान निम्नलिखित है:

$('#myModal').modal({backdrop: 'static', keyboard: false})  

बैकड्रॉप: क्लिक आउट इवेंट को अक्षम कर दिया

कीबोर्ड: स्कैप कीवर्ड ईवेंट को अक्षम कर दिया


4
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-keyboard="false" data-backdrop="static">

यह कोशिश करो, मेरे आवेदन के विकास के दौरान ... मैं एक मॉडल विशेषता => data-keyboard="true", => के लिए डिफ़ॉल्ट मानों की परेशानी से भी मिलाdata-backdrop="non static"

आशा है कि यह आपकी मदद करेगा!



1

इनमें से किसी भी समाधान ने मेरे लिए काम नहीं किया।

मेरे पास एक नियम और शर्तें हैं जो मैं लोगों को जारी रखने से पहले समीक्षा करने के लिए मजबूर करना चाहता था ... विकल्पों के अनुसार चूक "स्थिर" और "कीबोर्ड" पृष्ठ को नीचे स्क्रॉल करना असंभव बना दिया क्योंकि नियम और शर्तें कुछ पृष्ठ हैं लॉग, स्टेटिक मेरे लिए जवाब नहीं था।

इसलिए इसके बजाय मैं मोडल पर क्लिक विधि को अनबाइंड करने के लिए गया, निम्नलिखित के साथ मैं वांछित प्रभाव प्राप्त करने में सक्षम था।

$('.modal').off('click');



0
You can Disallow closing of #signUp (This should be the id of the modal) modal when clicking outside of modal.
As well as on ESC button.
jQuery('#signUp').on('shown.bs.modal', function() {
    jQuery(this).data('bs.modal').options.backdrop = 'static';// For outside click of modal.
    jQuery(this).data('bs.modal').options.keyboard = false;// For ESC button.
})

0

यदि आप @ एनजी-बूटस्ट्रैप का उपयोग कर रहे हैं, तो निम्न का उपयोग करें:

अंग

import { Component, OnInit } from '@angular/core';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';

@Component({
  selector: 'example',
  templateUrl: './example.component.html',
  styleUrls: ['./example.component.scss'],
})
export class ExampleComponent implements OnInit {

  constructor(
    private ngbModal: NgbModal
  ) {}

  ngOnInit(): void {
  }

  openModal(exampleModal: any, $event: any) {
    this.ngbModal.open(exampleModal, {
      size: 'lg', // set modal size
      backdrop: 'static', // disable modal from closing on click outside
      keyboard: false, // disable modal closing by keyboard esc
    });
  }
}

खाका

<div (click)="openModal(exampleModal, $event)"> </div>
    <ng-template #exampleModal let-modal>
        <div class="modal-header">
            <h5 class="modal-title">Test modal</h5>
        </div>
        <div class="modal-body p-3">
            <form action="">
                <div class="form-row">
                    <div class="form-group col-md-6">
                        <label for="">Test field 1</label>
                        <input type="text" class="form-control">
                    </div>
                    <div class="form-group col-md-6">
                        <label for="">Test field 2</label>
                        <input type="text" class="form-control">
                    </div>

                    <div class="text-right pt-4">
                        <button type="button" class="btn btn-light" (click)="modal.dismiss('Close')">Close</button>
                        <button class="btn btn-primary ml-1">Save</button>
                    </div>
            </form>
        </div>
    </ng-template>

इस कोड का उपयोग कर कोणीय 9 पर परीक्षण किया गया था:

  1. "@ एनजी-बूटस्ट्रैप / एनजी-बूटस्ट्रैप": "^ 6.1.0",

  2. "बूटस्ट्रैप": "^ 4.4.1",


0

यदि आप jQuery का उपयोग करके सभी मॉडल्स के लिए बाहरी क्लिक को अक्षम करना चाहते हैं तो इसका उपयोग करें। JQuery के बाद इस स्क्रिप्ट को अपनी जावास्क्रिप्ट में जोड़ें।

jQuery(document).ready(function () {
    jQuery('[data-toggle="modal"]').each(function () {
       jQuery(this).attr('data-backdrop','static');
       jQuery(this).attr('data-keyboard','false');
    });
});

-1

आप JQuery का उपयोग किए बिना भी ऐसा कर सकते हैं, जैसे:

<div id="myModal">

var modal = document.getElementById('myModal');
modal.backdrop = "static";
modal.keyboard = false;

-2

अपनी स्क्रीन चौड़ाई के अनुसार नीचे सीएसएस जोड़ें।

@media (min-width: 991px){
    .modal-dialog {
        margin: 0px 179px !important;
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.