bootstrap jquery show.bs.modal olayı ateşlenmiyor


83

bootstrap 3 belgelerinden modal örneği kullanıyorum. modal çalışır. ancak, ateşlendiğinde show.bs.modal olayına erişmem gerekiyor. şimdilik sadece deniyorum:

$('#myModal').on('show.bs.modal', function () {
   alert('hi')
})

Hiçbir şey olmuyor, olay ateşlenmiyor. Neyi yanlış yapıyorum??? Bu bana mantıklı gelmiyor.

Yanıtlar:


103

bunu kullan:

$(document).on('show.bs.modal','#myModal', function () {
  alert('hi');
})

8
Bu benim sorunumu çözdü. Ama onu belgenin dışına yerleştirdim. Hazır işlev. Document.ready içine koyduğumda çalışmıyordu. Birine yardımcı olabilir.
Harish Chinju

2
Dinamik olarak oluşturulan ajax modları ile mükemmel çalıştığı için bu kabul edilen cevap olmalıdır $(data).modal('show');.
kjdion84

2
Bu, belgedeki her model için ateşlenir. Yalnızca belirli bir modeli hedeflemek için kullanabilirsiniz $(document).on('hidden.bs.modal', function (e) { if (e.target.id === 'my-modal-id') { alert('hi'); } });. Kimliğin geldiği yer<div class="modal fade" id="my-modal-id">
przno

2
@przno Hayır olmaz, ikinci argüman, öğeyi belirten seçicidir.
Tom

Kullandığınızda $(document).on(..., dinleyicinizi belgeye bağlamış olursunuz ve hedef öğelerinizin var olup olmadığı önemli değildir. İlk bağımsız değişken olarak olay adını ve son olarak geri arama işlevini eklemelisiniz, ancak ikinci bağımsız değişken olarak bir sorgu seçici ekleyebilirsiniz
Ali

82

on('shown.bs.modal')Açmak için modal'ı başlatmadan önce yerleştirdiğinizden emin olun .

$("#myModal").on("shown.bs.modal", function () { 
    alert('Hi');
});
$("#myModal").modal('show'); //This can also be $("#myModal").modal({ show: true });

veya

$("#myModal").on("shown.bs.modal", function () { 
    alert('Hi');
}).modal('show');

Bir alana odaklanmak için shown.bs.modalyerine kullanmak daha iyidir , show.bs.modalancak belki başka nedenlerle arka planda bir şeyi gizlemek veya modal gösterilmeye başlamadan hemen önce bir şey ayarlamak istiyorsanız, show.bs.modalişlevi kullanın .


@ kjdion84 - onları yarattığınız yerde, olayları bağlamalısınız. `var amodal = $ (" <div modal ... /> "); amodal.on (..., işlevim) .modal ('gösteri');
Pierre

Kullanırsanız herhangi bir olayı bağlamanız gerekmez $(document).on().
kjdion84

3
^ Bu benim sorunumu çözer. Ayrıca, show.bs.modalbundan farklıdır shown.bs.modal. Birincisi, modal görünmek üzereyken patlar. İkincisi, gösterildiğinde. Büyük farklı.
Yukio Fukuzawa

@KUMAR aradığınızda bootstrap'in çağırdığı olaydır .modal('show'). O kavram fiilleri için çağrı dört etkinlik yok: [ show.bs.modal, shown.bs.modal, hide.bs.modal, hidden.bs.modal] - gösterisi buna gösterilmeye başladığında, gösterilen deri için aynı ve gizli göstermek için gidiyor zamandır. getbootstrap.com/docs/3.4/javascript/#modals-events
Pierre

18

İşlevinizi $(document).ready(function() {veya daha basit bir şekilde sarın $(function() {. CoffeeScript'te bu şöyle görünecektir:

$ ->
  $('#myModal').on 'show.bs.modal', (event)->

Bu olmadan JavaScript, belge yüklenmeden önce yürütülür ve #myModalhenüz DOM'un bir parçası değildir. İşte Bootstrap referansı .


12
$(document).on('shown.bs.modal','.modal', function () {

/// TODO EVENTS

});

2
bir şekilde bu benim için en yararlı cevaptı. .modalçözüm kimliğine başvurmak yerine onunla çalışmak gibi görünüyor ... teşekkürler!
mabu

Bu en iyi cevaptır, çünkü spesifik değildir ve sadece ayarlanmış bir modal tetikleyiciden ziyade gösterilen herhangi bir modda tetiklenecektir.
2019'da

10

Bunu dene

$('#myModal').on('shown.bs.modal', function () {
   alert('hi');
});

shownBunun yerine kullanarak show, işlevinizin ve uyarınızın sonunda noktalı virgüllerin bulunduğundan emin olun.


8
Hem 'show.bs.modal' hem de 'shown.bs.modal' benim amaçlarım için çalışmalıdır, her ikisi de önyükleme belgelerinde geçerli olaylar olarak listelenmiştir. hala çalışmıyor.
m4rlo

1
JQuery'nizin çalıştığını doğruladınız mı, örneğin $ (document) .ready (function () {alert ('test');});
Trevor

evet, show olayının dışına, sadece document.ready içine bir uyarı koyarsam, o zaman tetiklenir.
m4rlo

1
@BassJobsen html'sinde application.js'ye iki kez referans veriyor, bunlardan biri doğru dosyayı yüklüyor. Diğeri bulunamadı .. Bu soruna neden olur mu?
Trevor

1
Teşekkürler @Trevor. Benim için de çalıştı. 2 jquery.js ekliyordum. :-p
Akshay Vishnoi

7

Bunu ekle:

$(document).ready(function(){
    $(document).on('shown.bs.modal','.modal', function () {
         // DO EVENTS
    });
});

6

Bana da benzer bir şey oldu ve setTimeout kullanarak çözdüm.

Bootstrap, gösterimi tamamlamak için aşağıdaki zaman aşımını kullanıyor:

c.TRANSITION_DURATION = 300, c.BACKDROP_TRANSITION_DURATION = 150,

Yani 300'den fazla kullanmak işe yaramalı ve benim için 200 çalışıyor:

$('#myModal').on('show.bs.modal', function (e) {
    setTimeout(function(){
        //Do something if necessary
    }, 300);                        
})

1
İşte aradığım şey bu! Önyüklemenin geçiş süresini belirttiğiniz için teşekkür ederiz!
Tebrikler

4

Benim durumumda, .modal-dialog div eksikti

Olayı tetiklemez: shown.bs.modal

<div id="loadingModal" class="modal fade">
  <p>Loading...</p>
</div>

Yangın olayı: shown.bs.modal

<div id="loadingModal" class="modal fade">
  <div class="modal-dialog">      
    <p>Loading...</p>
  </div>
</div>

3

Benzer ama farklı bir sorun yaşadım ve $ ('# myModal') kullandığımda hala çalışamıyorum. $ (Pencere) kullandığımda onu çalıştırmayı başardım.

Diğer sorunum ise, modal div html içeriğimi.

var content="<div id='myModal' ...";
$(content).modal();
$(window).on('show.bs.modal', function (e) {
  alert('show test');
});

olay gerçekleşmediği için asla ateşlenmedi

benim düzeltmem, div'leri html gövdesine dahil etmekti

<body>
    <div id='myModal'>
       ...
    </div>
    <script>
        $('#myModal).modal();
        $(window).on('show.bs.modal', function (e) {
            alert('show test');
        });
    </script>
</body>


2

Bootstrap'i kullanmadan önce jQuery'yi yüklediğinizden emin olun. Kulağa basit geliyor, ancak bu kalıcı olayları yakalamada sorunlar yaşıyordum ve hatanın kodumda olmadığı, ancak jQuery'den önce Bootstrap'i yüklediğim ortaya çıktı.


2

Bazen bu işe yaramazsa:

1) ile satırınızdan önce java betik kodunda bir hata var $('#myModal').on('show.bs.modal'...). Sorunu gidermek için, sayfayı yüklediğinizde gelip gelmediğini görmek için satırın önüne bir uyarı mesajı koyun. Sorunun hangisi olduğunu görmek için yukarıdaki JS'leri ortadan kaldırmak için

2) Başka bir sorun da JS'yi yanlış sırayla yüklemenizdir. Örneğin, $('#myModal').on('show.bs.modal'...)JQuery.js'yi gerçekten yüklemeden önce parçaya sahip olabilirsiniz . Bu durumda aramanız yok sayılacaktır, bu nedenle ilk önce HTML'de (emin olmak için sayfa kaynağını görüntüleyin) JQuery'ye giden komut dosyası bağlantısının modal onShowçağrınızın üstünde olup olmadığını kontrol edin , aksi takdirde yok sayılır. Sorun gidermek için daha önce bir tane gösterinin içine bir uyarı koyun. OnShow işlevinin içindekini değil de öncekini görüyorsanız, işlevin yürütülemeyeceği açıktır. Yazım doğruysa, JQuery.js çağrınız yapılmamışsa veya onShowparçadan sonra yapılmışsa


Bu bana yardımcı oldu - $('#myModal').on('show.bs.modal'...)JQuery yüklendikten sonra olmalı. Teşekkürler!
Ian Wold

2

Bootstrap4 ile aynı sorunu yaşadım. Çözüm, bunu jQuery document ready () işlevinin içine eklemekti:

$(document).ready(function() {
    $('#myModal').on('show.bs.modal', function () {
       alert('hi')
    })
}

1

Başka bir jquery modeli değil , gerçekten bootstrap jquery modelini kullandığınızdan emin olun .

Bunun için çok zaman harcadım ...


1

Aynı sorunu yaşadım. Benim için jquery'yi bu sırayla iki kez yükledim:

  1. Yüklü jQuery
  2. Yüklü Bootstrap
  3. JQuery yeniden yüklendi

JQuery ikinci kez yüklendiğinde, önyükleme referanslarını bir şekilde kırdı ve modal açıldı, ancak on ('shown.bs ..') yöntemi asla ateşlenmedi.


0

Benim durumumda sorun, travelsize yorumunun nasıl olduğuydu .. Bootstrap.js ve jquery arasındaki içe aktarım sırası. Çünkü Metronic şablonunu kullanıyorum ve daha önce kontrol etmiyorum



0

Bu, kod daha önce yürütüldüğünde ve görünmediğinde olur, böylece tp fire için timeout () ekleyebilirsiniz.

$(document).on('shown.bs.modal', function (event) {
      setTimeout(function(){
        alert("Hi");
      },1000); 
    });

-1

Ayrıntılı ayrıntılar aşağıdadır:

show.bs.modal, model iletişim kutusu yüklenirken, shown.bs.modal yüklendikten sonra herhangi bir şey yapmak için çalışırken çalışır. post render

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.