부트 스트랩 모달 영역 외부의 클릭을 비활성화하여 모달을 닫습니다.


440

Bootstrap 'Modals'와 함께 부트 스트랩 웹 사이트를 만들고 있습니다. 기본 기능 중 일부를 사용자 정의하려고합니다.

문제는 이것입니다. 배경을 클릭하여 모달을 닫을 수 있습니다. 이 기능을 비활성화 할 수 있습니까? 특정 모달에서만?

부트 스트랩 모달 페이지


이 상황에서 어떤 이벤트가 호출되는지 알려주십시오. $ scope.ok, $ scope. $ dismiss 제출 및 중단을 위해 구현했지만이 상황에서 발생한 이벤트를 모르겠습니다.
LoveToCode

답변:


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

백그라운드에서 다른 컨트롤에 대한 클릭을 등록 할 수 있지만 모달을 닫지 않는 방법은 있습니까?
vivekanon

2
@mystikacid 당신은 그것에 대해 새로운 질문을해야합니다. 문제 및 다른 사용자가 유사한 솔루션을 검색하는 데 도움이됩니다.
Doguita


3
간단하지만 자극적 인 문제가 있었으면 $('#modal').modal('show');희망이 있기 전에 jquery 줄을 배치하십시오 .
cwiggo

3
cwiggo는 모달을 사용하지 않습니다 $ ( '# modal'). modal ( 'show'); -.modal ({backdrop : 'static', keyboard : false})-show 또는 toggle 명령없이
TV-C-15

135

이것은 가장 쉬운 것입니다

데이터 키보드 및 데이터 배경을 정의하여 모달 동작을 정의 할 수 있습니다.

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

2
이것이 나를 위해 일한 유일한 것입니다. JS의 옵션을 직접 전달하는 것은 어떤 이유로 든 작동하지 않았습니다 (버전 3.3.7). 다른 사람이 확증하면 Bootstrap 팀에 문제가 생길 수 있습니다.
dchacke

처음에 모달을 연 후에 모든 것을 설정했기 때문에 js 버전을 사용하면 나에게도 효과가 없었습니다. "$ ( '# modalForm'). modal ({background : 'static', keyboard : false});" 이 "$ ( '# modalForm'). modal ( 'show');"이전에. 그러나 나에게 가장 좋은 대답은 @ ಅನಿಲ್입니다.
Lucas

이것은 나를 위해 일했습니다. data-backdrop="static"다른 답변에 지정된대로 모달을 여는 트리거 버튼이 아닌 모달 정의에 옵션을 넣으면 나에게 도움이되었습니다.
TSmith

99

다음과 같은 속성을 사용 data-backdrop="static"하거나 javascript와 함께 사용할 수 있습니다 .

$('#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"> 이것이 가장 좋습니다.
Kamlesh 2014

34

내 응용 프로그램에서 아래 코드를 사용하여 jQuery를 통해 부트 스트랩 모달을 보여줍니다.

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

이 코드는 모달이 열려있을 때만 작동하기 때문에 좋은 대답입니다.
Deepak Dholiyan

32

당신이 사용할 수있는

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

기본 동작을 변경합니다.


모든 모달의 상황을 처리하므로 큰 대답입니다.
Haris ur Rehman

1
부트 스트랩 v4에서 구문은 다음과 같습니다. $ .fn.modal.prototype.constructor.Constructor.Default.backdrop = 'static';
Garry English

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로 변경


Bootstrap 4 + _setEscapeEvent()대신에 .escape()?
Ivan Bacher

@IvanBacher .escape ()를 사용하여 저에게 작동
Cava

5

나를 위해 일하는 해결책은 다음과 같습니다.

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

배경 : 외부 클릭 이벤트 사용 중지

키보드 : scape 키워드 이벤트 비활성화


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"

희망이 당신을 도울 것입니다!


3

이 시도:

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

이것은 나를 위해 감사했다 .....
Ajay Kumar

1

이 솔루션 중 어느 것도 나를 위해 일하지 않았습니다.

계속하기 전에 사람들이 검토하도록 강제하고 싶은 이용 약관이 있습니다 ... 옵션에 따라 기본값 "정적"및 "키보드"는 이용 약관이 몇 페이지이므로 페이지를 아래로 스크롤 할 수 없었습니다. log, static은 나에게 답이 아닙니다.

그래서 대신 모달에서 클릭 방법을 바인딩 해제했습니다. 다음과 같이 원하는 효과를 얻을 수있었습니다.

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

당신이 사용하는 경우 @ NG-부트 스트랩 사용을 다음과 같은 :

구성 요소

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. "@ ng-bootstrap / ng-bootstrap": "^ 6.1.0",

  2. "부트 스트랩": "^ 4.4.1",


0

jQuery를 사용하는 모든 모달에 대해 외부 클릭을 비활성화하려면 이것을 사용하십시오. jQuery 후에이 스크립트를 Javascript에 추가하십시오.

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

화면 너비를 원하는대로 아래 CSS를 추가하십시오.

@media (min-width: 991px){
    .modal-dialog {
        margin: 0px 179px !important;
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.