jquery-ui-dialog - İletişim close olayına bağlanma


186

jquery-ui-dialogEklentiyi kullanıyorum

Bazı durumlarda iletişim kutusu kapatıldığında sayfayı yenilemenin yolunu arıyorum.

İletişim kutusundan yakın bir olayı yakalamanın bir yolu var mı?

Kapat düğmesi tıklatıldığında kod çalıştırabileceğimi biliyorum, ancak kullanıcı kaçış veya sağ üst köşedeki x ile kapanmayı kapsamıyor.

Yanıtlar:


248

Onu buldum!

Aşağıdaki kodu kullanarak close olayını yakalayabilirsiniz:

 $('div#popup_content').on('dialogclose', function(event) {
     alert('closed');
 });

Açıkçası uyarıyı ne yapmam gerekiyorsa değiştirebilirim.
Düzenleme: Jquery 1.7 itibariyle, bind () açık () hale geldi


3
yazım hatası: $ ('div # popup_content'). bind ('iletişim kutusu', işlev (olay)) {...}
CFNinja

1
Bu yardımcı olur, ancak $('div#popup_content')doğru mu? Bunu neyle değiştirmeliyim, iletişim kutusumun böyle açıldığını akılda tutarakjQuery.fn.dialog.open({})
Jake N

İlk önce iletişim kutusunun kapanacağını görüyorum ve sonra uyarı herkesin durumu aynı ise, birisi bana uyarı gelsin diye yardım edebilir ve sonra Tamam'ı tıklattıktan sonra pencere kapanır mı? Beni düzeltin ....
changeme

5
Bu, artık kullanılmayan bind () yerine () kullanacak şekilde güncellenmelidir.
RBZ

2
Bir jQuery UI İletişim Kutusu daha önce bir sayfada hiç açılmadıysa, bindirme div değerinin DOM'da bulunmayacağını unutmayın. Bu nedenle, bunun yerine böyle bir şey yapmayı düşünebilirsiniz:$('body').on('dialogclose', '.ui-dialog', function(){...});
thdoan

192

Diyalog oluştururken de yapabileceğime inanıyorum (yaptığım bir projeden kopyalandı):

dialog = $('#dialog').dialog({
    modal: true,
    autoOpen: false,
    width: 700,
    height: 500,
    minWidth: 700,
    minHeight: 500,
    position: ["center", 200],
    close: CloseFunction,
    overlay: {
        opacity: 0.5,
        background: "black"
    }
});

Not close: CloseFunction


9
Bu cevap benim için kabul edilen cevaptan daha doğru görünüyor. Ayrıca, doğru API dokümanlarını burada bulabilirsiniz: api.jqueryui.com/dialog/#event-close
Chris Gillum

2
Jake N - Bunun çalışması için 'CloseFunction' iletişim kutusundan erişilebilen bir işlev yazmanız gerekiyor, örneğin hemen üzerine yazabilirsiniz var CloseFunction = function() { //Do your custom closing stuff here };
Adam Diament

Bu bir seçenektir, ancak zaman içinde kod farklı yerlerde kullanılmaktadır. Seçilen yanıt, farklı bağlamlarda farklı davranışlar eklemek ve standart oluşturma için iletişim kutusu oluşturma kodunu yeniden kullanmak istediğinizde işe yarar.
NectarSoft

You have overlayiki kere. Bu gereksiz değil mi?
radbyx

1
Bu işe yarar ve kesinlikle burada gerekli ve yararlı bir cevaptır, ancak iletişim kutusu yalnızca X veya başka bir şeyle kapatıldığında değil, herhangi bir yolla kapatıldığında kapatılır. Bu nedenle, iletişim kutusu X veya İptal düğmesiyle kapatıldığında belirli bir kodu çalıştırmak istiyorsanız, ancak başka bir şeyle kapatıldığında değil (gönderilen bir girişin doğru olarak doğrulandığı durumda olduğu gibi), bu olmaz iş.
mikato

31
$("#dialog").dialog({
    autoOpen: false,
    resizable: false,
    width: 400,
    height: 140,
    modal: true, 
    buttons: {
        "SUBMIT": function() { 
        $("form").submit();
    }, 
        "CANCEL": function() { 
        $(this).dialog("close");
    } 
    },
    close: function() {
      alert('close');
    }
});

21
$( "#dialogueForm" ).dialog({
              autoOpen: false,
              height: "auto",
              width: "auto",
              modal: true,
                my: "center",
                at: "center",
                of: window,
              close : function(){
                  // functionality goes here
              }  
              });

iletişim kutusunun "close" özelliği bunun için close olayını verir.


16

Bunu da deneyebilirsin

$("#dialog").dialog({
            autoOpen: false,
            resizable: true,
            height: 400,
            width: 150,
            position: 'center',
            title: 'Term Sheet',
            beforeClose: function(event, ui) { 
               console.log('Event Fire');
            },
            modal: true,
            buttons: {
                "Submit": function () {
                    $(this).dialog("close");
                },
                "Cancel": function () {
                    $(this).dialog("close");
                }
            }
        });

10

Bu benim için işe yaradı ...

$('#dialog').live("dialogclose", function(){
   //code to run on dialog close
});

8

JQuery 1.7'den itibaren .on () yöntemi, olay işleyicilerini bir belgeye iliştirmek için tercih edilen yöntemdir.

Çünkü kimse aslında kullanarak bir cevap yaratmadı. on()yerine bind()bir tane oluşturmaya karar verdim.

$('div#dialog').on('dialogclose', function(event) {
     //custom logic fired after dialog is closed.  
});

6

örnek altında olduğu gibi 'kapat' seçeneği ekleyin ve satır içi işlevi istediğinizi yapın

close: function(e){
    //do something
}

4

Bahsettiğiniz pencere türünü anlıyorsam $ (window) .unload () olmaz (iletişim penceresi için) size ihtiyacınız olan kancayı vermez mi?

(Yanlış anladıysam ve bir pop-up tarayıcı penceresi yerine CSS üzerinden yapılan bir iletişim kutusundan bahsediyorsanız, o pencereyi kapatmanın tüm yolları tıklama işleyicilerini kaydedebileceğiniz öğelerdir.)

Edit: Ah, şimdi görüyorsun CSS ile yapılan jquery-ui iletişim kutuları hakkında konuşuyorsun. Sen kanca X sınıfı ile eleman için bir tıklama işleyicisi kaydederek pencereyi kapatır ui-iletişim-başlık çubuğu-yakın .

Daha faydalı, belki de, bunu hızlı bir şekilde nasıl çözeceğinizi anlatacaksınız. İletişim görüntülerken, sadece açık FireBug pop ve kontrol pencereyi kapatabilirsiniz unsurları. Bunların nasıl tanımlandığını anında görürsünüz ve bu, tıklama işleyicilerini kaydettirmek için neye ihtiyacınız olduğunu verir.

Sorunuzu doğrudan yanıtlamak için, cevabın gerçekten "hayır" olduğuna inanıyorum - kancalayabileceğiniz yakın bir etkinlik yok, ancak "evet" - iletişim kutusunu oldukça kolay bir şekilde kapatmak ve almak için tüm yolları bağlayabilirsiniz. Ne istiyorsunuz.


Hey andy. Ben css ve javascript ile yapılan jquery-ui iletişim eğlenceli. Koda bakarak benim için bir kanca var sanırım ama nasıl elde edeceğimi bilmiyorum.
Brownie

2

Herhangi bir öğe için closing olayını yakalamak için şu kodu deneyebilirsiniz: sayfa, iletişim kutusu vb.

$("#dialog").live('pagehide', function(event, ui) {
      $(this).hide();
});

1
Sadece .live () veya .bind () yerine .on () kullanın
cssyphus
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.