Tworzę stronę startową z kilkoma „Modalami” Bootstrap. Próbuję dostosować niektóre domyślne funkcje.
Problem jest taki; Możesz zamknąć modal klikając na tło. Czy istnieje możliwość wyłączenia tej funkcji? Tylko w przypadku określonych modeli?
Tworzę stronę startową z kilkoma „Modalami” Bootstrap. Próbuję dostosować niektóre domyślne funkcje.
Problem jest taki; Możesz zamknąć modal klikając na tło. Czy istnieje możliwość wyłączenia tej funkcji? Tylko w przypadku określonych modeli?
Odpowiedzi:
W rozdziale Opcje na połączonej stronie można zobaczyć tę backdrop
opcję. Przekazanie tej opcji wartości 'static'
spowoduje, że moduł nie zostanie zamknięty.
Jak zauważył @PedroVagner w komentarzach, możesz również przejść, {keyboard: false}
aby zapobiec zamknięciu modalu, naciskając Esc.
Jeśli otwierasz modal przez js użyj:
$('#myModal').modal({backdrop: 'static', keyboard: false})
Jeśli używasz atrybutów danych, użyj:
<button data-target="#myModal" data-toggle="modal" data-backdrop="static" data-keyboard="false">
Launch demo modal
</button>`
$('#modal').modal('show');
Nadzieją, że to pomaga!
To jest najłatwiejsze
Możesz zdefiniować swoje zachowanie modalne, definiując klawiaturę danych i tło danych.
<div id="modal" class="modal hide fade in" data-keyboard="false" data-backdrop="static">
data-backdrop="static"
Dla mnie zadziałało umieszczenie opcji w definicji modalnej, a nie przycisku wyzwalającego otwierającego modal, jak podano w innych odpowiedziach.
Możesz użyć takiego atrybutu: data-backdrop="static"
lub z javascript:
$('#myModal').modal({
backdrop: 'static',
keyboard: false // to prevent closing with Esc button (if you want this too)
})
Zobacz także tę odpowiedź: Nie zezwalaj na zamykanie okna modalnego programu ładującego Twitter
W mojej aplikacji używam poniższego fragmentu kodu, aby pokazać modalność Bootstrap za pośrednictwem jQuery.
$('#myModall').modal({
backdrop: 'static',
keyboard: true,
show: true
});
Możesz użyć
$.fn.modal.prototype.constructor.Constructor.DEFAULTS.backdrop = 'static';
$.fn.modal.prototype.constructor.Constructor.DEFAULTS.keyboard = false;
zmienić domyślne zachowanie.
Istnieją dwa sposoby wyłączenia kliknięcia poza obszarem modelu bootstrap, aby zamknąć modal-
za pomocą javascript
$('#myModal').modal({
backdrop: 'static',
keyboard: false
});
za pomocą atrybutu danych w znaczniku HTML
data-backdrop="static" data-keyboard="false" //write this attributes in that button where you click to open the modal popup.
Sprawdź to ::
$(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>
Inna opcja, jeśli nie wiesz, czy modal został już otwarty, czy jeszcze nie i musisz skonfigurować opcje modalne:
Bootstrap 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
}
}
Zmień opcje na _config
_setEscapeEvent()
zamiast .escape()
?
Rozwiązanie, które działa dla mnie, jest następujące:
$('#myModal').modal({backdrop: 'static', keyboard: false})
tło: wyłączono zdarzenie „kliknij poza”
klawiatura: wyłączono zdarzenie słowa kluczowego scape
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-keyboard="false" data-backdrop="static">
spróbuj tego, Podczas tworzenia aplikacji ... Spotkałem się również z problemem, że domyślne wartości atrybutu modelu => data-keyboard="true"
, =>data-backdrop="non static"
Mam nadzieję, że to ci pomoże!
Spróbuj tego:
<div
class="modal fade"
id="customer_bill_gen"
data-keyboard="false"
data-backdrop="static"
>
żadne z tych rozwiązań nie działało dla mnie.
Mam modalny regulamin, który chciałem zmusić ludzi do sprawdzenia przed kontynuowaniem ... domyślne ustawienia „statyczne” i „klawiatura” zgodnie z opcjami uniemożliwiły przewijanie strony, ponieważ warunki to kilka stron log, statyczny nie był dla mnie odpowiedzią.
Zamiast tego poszedłem rozpiąć metodę click na module, dzięki czemu udało mi się uzyskać pożądany efekt.
$('.modal').off('click');
backdrop: 'static'
https://getbootstrap.com/docs/3.3/javascript/#modals-options
określ
static
tło, które nie zamyka modalu po kliknięciu.
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.
})
Jeśli używasz @ ng-bootstrap, użyj następujących poleceń :
Składnik
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
});
}
}
Szablon
<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>
Ten kod został przetestowany na kancie 9 przy użyciu:
„@ ng-bootstrap / ng-bootstrap”: „^ 6.1.0”,
„bootstrap”: „^ 4.4.1”,
Użyj tego, jeśli chcesz wyłączyć kliknięcie zewnętrzne dla wszystkich modów korzystających z jQuery. Dodaj ten skrypt do JavaScript po jQuery.
jQuery(document).ready(function () {
jQuery('[data-toggle="modal"]').each(function () {
jQuery(this).attr('data-backdrop','static');
jQuery(this).attr('data-keyboard','false');
});
});
Możesz to również zrobić bez użycia JQuery, na przykład:
<div id="myModal">
var modal = document.getElementById('myModal');
modal.backdrop = "static";
modal.keyboard = false;