Modal'ı kapatmak için bootstrap modal alanının dışındaki tıklamayı devre dışı bırak


440

Birkaç Bootstrap 'Modals' ile bir bootstrap web sitesi yapıyorum. Bazı varsayılan özellikleri özelleştirmeye çalışıyorum.

Sorun şu; Arka plana tıklayarak modeli kapatabilirsiniz. Bu özelliği devre dışı bırakmanın bir yolu var mı? Yalnızca özel modlarda?

Bootstrap kalıcı sayfası


lütfen bana bu durumda hangi olayın çağrıldığını söyleyebilir misiniz? $ scope.ok, $ scope. $ dismiss ben gönderme ve iptal için uygulamak var ama bu durumda kovuldu olay bilmiyorum.
LoveToCode

Yanıtlar:


912

Seçenekler bölümünde, bağladığınız sayfada backdropseçeneği görebilirsiniz . Bu seçeneğin değerle 'static'geçilmesi, modun kapanmasını önleyecektir.
@PedroVagner yorumlara işaret ettiği gibi, modalın {keyboard: false}tuşuna basarak kapanmasını önlemek için de geçebilirsiniz Esc.

Kipi js ile açarsanız kullanın:

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

Veri özelliklerini kullanıyorsanız, şunu kullanın:

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

arka planı diğer kontroller için tıklamaları kaydedebilmenin, ancak modülleri kapatmanın bir yolu var mı?
vivekanon

2
@mystikacid Bunun için yeni bir soru sormalısınız. Sorununuzda ve benzer bir çözüm arayan diğer kullanıcılarda size yardımcı olmak daha iyi olacaktır.
Doguita


3
Basit ama rahatsız edici bir sorun vardı, $('#modal').modal('show');bu yardımcı olur umut önce jquery hattı yerleştirdiğinizden emin olun !
cwiggo

3
cwiggo, modal $ ('# modal') kullanmazsınız. modal ('show'); - sadece .modal ({backdrop: 'statik', klavye: yanlış}) kullanın - herhangi bir gösteri veya geçiş komutu olmadan
TV-C-15

135

Bu en kolayı

Veri klavyesini ve veri arka planını tanımlayarak kalıcı davranışınızı tanımlayabilirsiniz.

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

2
Benim için işe yarayan tek şey bu. JS'deki seçeneklerin doğrudan aktarılması bir nedenden dolayı benim için işe yaramadı (sürüm 3.3.7). Başka biri destekliyorsa, Bootstrap ekibiyle bir sorun açabilirim.
dchacke

İlk başta, js sürümünü kullanmak benim için işe yaramadı çünkü modal açtıktan sonra her şeyi ayarlıyordum. Bunu "$ ('# modalForm'). Modal ({backdrop: 'static', klavye: false});" bundan önce "$ ('# modalForm'). modal ('show');". Ama benim için en iyi cevap @ ಅನಿಲ್'dan geliyor
Lucas

Bu benim için çalıştı. data-backdrop="static"Seçeneği, diğer yanıtlarda belirtildiği gibi kipi açan tetikleyici düğmesine değil, kip tanımına koymak benim için çalıştı.
TSmith


34

Benim uygulamada, jQuery üzerinden Bootstrap kalıcı göstermek için aşağıdaki kod parçasını kullanıyorum.

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

Bu iyi bir yanıttır, çünkü bu kod yalnızca mod açıkken çalışacaktır.
Deepak Dholiyan

32

Kullanabilirsiniz

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

varsayılan davranışı değiştirmek için.


Büyük cevap, tüm modals için durumu ele alır gibi.
Haris ur Rehman

1
Bootstrap v4'te sözdizimi: $ .fn.modal.prototype.constructor.Constructor.Default.backdrop = 'statik';
Garry English

11

Kalıcı modu kapatmak için önyükleme model alanının dışındaki tıklamayı devre dışı bırakmanın iki yolu vardır.

  1. javascript kullanma

    $('#myModal').modal({
       backdrop: 'static',
       keyboard: false
    });
  2. HTML etiketinde veri niteliğini kullanma

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

9

Bunu kontrol et ::

$(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

Modalın henüz açılmış olup olmadığını bilmiyorsanız ve mod seçeneklerini yapılandırmanız gerekiyorsa başka bir seçenek:

Önyükleme 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
    }
}

Bootstrap 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
    }
}

Seçenekleri _config olarak değiştir


Bootstrap 4 + için _setEscapeEvent()değil .escape()mi?
Ivan Bacher

@IvanBacher .escape ()
Cava

5

Benim için çalışan çözüm şudur:

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

arka plan: dış tıklama olayını devre dışı bıraktı

klavye: scape anahtar kelime etkinliğini devre dışı bıraktı


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

Bunu deneyin, Uygulama geliştirme sırasında ... Ayrıca bir model özniteliği için varsayılan değerlerin => data-keyboard="true", =>data-backdrop="non static"

Bu size yardımcı olacağını umuyoruz!


3

Bunu dene:

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

Bu benim için çalıştı teşekkürler .....
Ajay Kumar

1

bu çözümlerin hiçbiri benim için çalışmadı.

Ben devam etmeden önce insanları gözden geçirmeye zorlamak istediğim bir şartlar ve koşullar modal var ... seçeneklere göre varsayılan "statik" ve "klavye" şartlar ve koşullar birkaç sayfa olduğu için sayfayı aşağı kaydırmak imkansız yaptı log, statik benim için cevap değildi.

Bunun yerine, modal üzerinde tıklama yöntemini çözmek için gittim, aşağıdaki ile istenen efekti elde edebildim.

$('.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

Eğer kullanıyorsanız @ ng-önyükleme kullanımını aşağıdadır:

Bileşen

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
    });
  }
}

şablon

<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>

Bu kod açısal 9 üzerinde aşağıdakiler kullanılarak test edilmiştir:

  1. "@ ng-bootstrap / ng-bootstrap": "^ 6.1.0",

  2. "bootstrap": "^ 4.4.1",


0

JQuery kullanarak tüm modüller için dış tıklamayı devre dışı bırakmak istiyorsanız bunu kullanın. Bu komut dosyasını jQuery'den sonra Javascript'inize ekleyin.

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

-1

Bunu JQuery kullanmadan da yapabilirsiniz:

<div id="myModal">

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

-2

Aşağıdaki css'yi ekran genişliğinize göre ekleyin.

@media (min-width: 991px){
    .modal-dialog {
        margin: 0px 179px !important;
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.