Twitter Bootstrap kalıcı penceresinin kapanmasına izin verme


549

Twitter Bootstrap kullanarak kalıcı bir pencere oluşturuyorum. Varsayılan davranış, kalıcı alanın dışını tıklatırsanız kalıcı otomatik olarak kapanır. Bunu devre dışı bırakmak istiyorum - yani modun dışına tıklarken mod penceresini kapatmayın.

Birisi bunu yapmak için jQuery kodunu paylaşabilir mi?


1
Bunu yapmak için tamamen geçerli bir nedeniniz olabilir (ve muhtemelen başkaları da vardır). Bununla birlikte, genel olarak, UX düşüncelerinin buna karşı tavsiyede bulunacağını belirtmek gerekir - çoğu kullanıcı bir moddan çıkmanın "aşağıda" içeriğini "cepheye" getirmesini bekler.
Trevor

32
Tam tersi @Trevor Yani en modal .
Rawling

11
arka planda yalnızca kullanıcı önce oturum açtığında etkinleştirilebilecek bir sayfa varsa ne olur. Kalıcı Tamam düğmesine tıklandığında kullanıcı giriş sayfasına yönlendirilir. Kullanıcı sadece tıklayabilirse, bu, kullanıcının giriş sayfasını atladığı ve giriş yapmadan sayfaya eriştiği anlamına gelir. Tüm Cehennem Arası Gevşek
jumper rbk

5
@Trevor İddianızı destekleyecek hiçbir kanıt göremiyorum.
1252748

Bu özellik, kullanıcının moddaki birçok form alanını doldurması gerektiğinde bir senaryoda duyulur. Kullanıcı yanlışlıkla modun dışına tıklarsa, girilen tüm ayrıntılar kaybolur; daha sonra modları yeniden etkinleştirmeleri ve alanları doldurmaları gerekir. Bu özellik böyle bir tahrişi önleyecektir.
mickmackusa

Yanıtlar:


692

Ben ayarlamak istediğiniz inanıyoruz fon değeri için statik . EscAnahtarı kullanırken pencerenin kapanmasını önlemek istiyorsanız, başka bir değer ayarlamanız gerekir.

Misal:

<a data-controls-modal="your_div_id"
   data-backdrop="static"
   data-keyboard="false"
   href="#">

VEYA JavaScript kullanıyorsanız:

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

7
@ user1296175 Bunu başarmak için son kodunuz neydi? Ben de aynısını yapmak istiyorum.
AlphaMale

4
@Nobita, veri-backdrop = "statik" eklemek hile yapar! Twitter bootstrap belgesi kötü :(
Blue Smith

2
@@ Varun Chatterji'nin cevabını kontrol edin ve bunu kalıcı tanımınıza ekleyin
Leandro

1
tek satır js ile tüm modals için dış tıklamayı devre dışı bırak: $ .fn.modal.Constructor.DEFAULTS.backdrop = 'statik';
Lukas Liesis

1
Açısal kullanıcılar için: var modalInstance = $ modal.open ({templateUrl: 'modalTemplate.html', denetleyici: 'modalController', zemin: 'statik',});
Alexandr

310

Sadece backdropözelliği olarak ayarlayın 'static'.

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

keyboardÖzelliği , klavyedeki tuşa falsebasarak modun kapatılmasını önlediğinden de ayarlamak isteyebilirsiniz Esc.

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

myModal kalıcı içeriğinizi içeren div'ın kimliğidir.


6
Evet, bu en temiz, en basit cevaptır (çünkü veri öznitelikleri eklemekten kaçınır). Başvuru için backdropve keyboardbahsedilmektedir kendi belgelerinde burada altında Seçenekler bölümünde.
Jesse Dupuy

Veri özelliklerinden kaçınılması gereken bir şey var mı? Lütfen bu konuda rehberlik edin.

@GopalAggarwal: Kipin nasıl ayarlandığına bağlı. Bir yöntemi birden çok bağlantı etiketiyle ilişkilendirirseniz, veri özelliklerini kullanmak mantıklı olabilir. Ancak etiket başına yalnızca bir mod olduğunda, her davranışın tek bir yerde görülebildiği komut dosyası parametreleriyle giderdim.
Nirmal

7
Ayrıca modal görüntülemenin hemen gösteride geçmesini önlemek için: false
ClearCloud8

214

Bu öznitelikleri kalıcı tanımın kendisine de ekleyebilirsiniz:

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

4
Evet, bu en temiz, en basit cevaptır (çünkü veri öznitelikleri ekleyerek çalışır). Referans olması için, fon ve klavye burada Seçenekler bölümü altındaki dokümanlarında belirtilmiştir.
floww

Modal'ı sayfa yüklemesinde başlatırsanız, diğer kapatma seçeneklerini kaldırmanın en iyi yolu budur.
Noel Baba

46

Kalıcı pencereyi zaten başlattıysanız $('#myModal').removeData("modal").modal({backdrop: 'static', keyboard: false}), yeni seçenekleri uygulayacağından emin olmak için seçenekleri ile sıfırlamak isteyebilirsiniz .


1
Bu bana yardımcı oldu. "Arka plan: 'statik'" ayarlandıktan sonra kullanıcı yine de bir tıklamayla modu kapatabilir; bir hata gibi görünüyordu, ama bu hile yaptı!
Omar

7
Şimdilik: $ ('# modal'). RemoveData ('bs.modal'). Modal ({backdrop: 'statik', klavye: yanlış});
D3VELOPER

34

İletişim kutusunun Bootstrap 'hide' olayını geçersiz kılın ve varsayılan davranışını durdurun (iletişim kutusunu atmak için).

Lütfen aşağıdaki kod snippet'ine bakın:

   $('#yourDialogID').on('hide.bs.modal', function(e) {

       e.preventDefault();
   });

Bizim durumumuzda iyi çalışıyor.


2
sonra nasıl geri alınır?
sertaconay

3
Sadece zarif. thx :) Ve @sertaconay sadece varsayılanı önlemek isteyip istemediğinize karar vermek için kontrol edilecek bir boolean değişkeni (örneğin) oluşturun
Nimrod Yonatan Ben-Nes

1
burada bir modal sonra çalıştı seçenek opend
asked_io

2
Modellerin ne zaman kapanabileceği ve ne zaman kapanmadığı üzerinde daha iyi kontrol sahibi olmak istiyorsanız bu mükemmel bir çözümdür.
Curos

33

Evet, bunu şu şekilde yapabilirsiniz:

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

Bu, modun html'de bildirildiği ve sadece javascript ile açıldığı bir durum için mükemmeldir - yani, bununla ilgili bir bağlantı yoktur. Teşekkürler!
hgolov

22

@ AymKdn'ın cevabı gibi, ancak bu, modalı yeniden başlatmadan seçenekleri değiştirmenize izin verecektir.

$('#myModal').data('modal').options.keyboard = false;

Veya birden fazla seçenek yapmanız gerekiyorsa, withburada JavaScript'ler kullanışlı olur!

with ($('#myModal').data("modal").options) {
    backdrop = 'static';
    keyboard = false;
}

Mod zaten açıksa, bu seçenekler yalnızca modun bir sonraki açılışında geçerli olur.


stackoverflow.com/questions/16030448/… Ama bu çözümü sevmiyorum
Victor

14

Sadece bu iki şeyi ekleyin

data-backdrop="static" 
data-keyboard="false"

Şimdi böyle görünecek

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

Kaçış düğmesini ve ayrıca herhangi bir yeri tıklayıp gizleyecektir.


Bu tavsiye yıllar önce verilmiştir.
mickmackusa

11

Bu JavaScript'i sayfanıza ekleyerek arka planın tıkla ve kapat davranışını devre dışı bırakabilir ve bunu tüm modals'larınız için varsayılan yapabilirsiniz (jQuery ve Bootstrap JS yüklendikten sonra yürütüldüğünden emin olun):

$(function() {
    $.fn.modal.Constructor.DEFAULTS.backdrop = 'static';
});

6

D3VELOPER'ın dediği gibi, aşağıdaki kod sorunu çözer:

$('#modal').removeData('bs.modal').modal({backdrop: 'static', keyboard: false});

Hem jquery hem de bootstrap kullanıyorum ve sadece removeData('modal')çalışmıyor.


4

Bulduğum en iyi bağlantıya bu kodu eklemek

<!-- Link -->
<a href="#mdl" role="button"  data-backdrop="static" data-keyboard="false" data-toggle="modal" id_team="" ></a>
<-- Div -->
<div id="mdl" class="modal hide fade" tabindex="-1" role="dialog" data-keyboard="false" data-backdrop="static"></div>

2

Birinin Google'dan birisinin bir modalı kapatmasını nasıl önleyeceğini anlamaya çalışması durumunda, modalın sağ üst tarafında çıkarılması gereken bir kapatma düğmesi olduğunu unutmayın.

Gizlemek için bazı CSS kullandım:

#Modal .modal-header button.close {
    visibility: hidden;
}

"Display: none;" mod oluşturulduğunda üzerine yazılır, bu yüzden bunu kullanmayın.


Düğmeyi yalnızca kalıcı başlıktan kaldıramaz mısınız?
foop

Bazen HTML'yi değiştirmek yerine CSS kullanmak faydalı olabilir.
Drew

2

backdrop click closingÖzelliği koşullu olarak devre dışı bırakmak istiyorsanız . Çalışma zamanı sırasında backdropseçeneği ayarlamak için aşağıdaki satırı kullanabilirsiniz static.

Bootstrap v3.xx

jQuery('#MyModal').data('bs.modal').options.backdrop = 'static';

Bootstrap v2.xx

jQuery('#MyModal').data('modal').options.backdrop = 'static';

Bu backdropseçenek false( varsayılan davranış ) olarak ayarlanmış halihazırda başlatılmış bir modelin kapanmasını önleyecektir .


2

Aşağıdaki kod satırını kullanarak kalıcı açılır pencerenin varsayılan davranışını ayarlayabilirsiniz:

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

Bu yöntemi + 1 gibi, bu seçeneği tüm modals için istemiyorum.
tsohr

2

Bunu yapmak günümüzde çok kolay. Sadece ekle:

data-backdrop="static" data-keyboard="false" 

Kalıcı bölücünüzde.


Bu tavsiye yıllar önce aynı sayfada verilmiştir.
mickmackusa

1

Bu, bazılarınızın aradığı başka bir çözüm (benim gibi)

Benim sorunum benzerdi, içerideki iframe yüklenirken mod kutusu kapanıyordu, bu yüzden Iframe yüklemeyi bitirene kadar mod kapatma işlevini devre dışı bırakmak zorunda kaldım, sonra yeniden etkinleştirin.

Burada sunulan çözümler% 100 çalışmıyor.

Benim çözümüm şuydu:

showLocationModal = function(loc){

    var is_loading = true;

    if(is_loading === true) {

        is_loading  = false;
        var $modal   = $('#locationModal');

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

        // prevent Modal to close before the iframe is loaded
        $modal.on("hide", function (e) {
            if(is_loading !== true) {
                e.preventDefault();
                return false
            }
        });

        // populate Modal
        $modal.find('.modal-body iframe').hide().attr('src', location.link).load(function(){

            is_loading = true;
     });
}};

Bu yüzden kalıcı olarak Modal ile kapanmasını önlemek:

$modal.on("hide", function (e) {
    if(is_loading !== true) {
        e.preventDefault();
        return false
    }
});

Ancak iframe yüklendikten sonra kapatmayı yeniden etkinleştirecek var is_loading ile.


1
<button type="button" class="btn btn-info btn-md" id="myBtn3">Static 
Modal</button>

<!-- Modal -->
<div class="modal fade" id="myModal3" role="dialog">
<div class="modal-dialog">
  <!-- Modal content-->
  <div class="modal-content">
    <div class="modal-header">
      <button type="button" class="close" data-dismiss="modal">×</button>
      <h4 class="modal-title">Static Backdrop</h4>
    </div>
    <div class="modal-body">
      <p>You cannot click outside of this modal to close it.</p>
    </div>
    <div class="modal-footer">
      <button type="button" class="btn btn-default" data-
      dismiss="modal">Close</button>
    </div>
   </div>
  </div>
</div>
   <script>
    $("#myBtn3").click(function(){
     $("#myModal3").modal({backdrop: "static"});
    });
   });
  </script>

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.