2011-06-03 92 views
0

我有一個使用jQuery的對話框UI插件的對話框模式框。我試圖檢測用戶是否使用標題欄右上角的「X」按鈕關閉了框,但沒有運氣。我試過了:jQuery對話框用戶界面無法檢測是否點擊關閉圖標

$('.myModal').dialog({ 
    title: 'dialog 1', 
    beforeClose: function(){ 
     //do something 
    } 
}).dialog("open"); 

這將執行該功能,而不管用戶操作如何。即如果用戶點擊「OK」而不是「X」按鈕。

我已經瀏覽了對話框文檔,找不到一個事件,方法或選項,它們給了我正在尋找的結果。任何想法將不勝感激。

+1

你會舉一個你遇到問題的小例子。是否有可能沒有加載一些jquery庫。 – mozillanerd 2011-06-03 19:40:17

+0

我調整了代碼的格式......作爲一個附註,你在'beforeClose'部分之前的'title'部分之後沒有逗號。這可能是你的問題。 – Incognito 2011-06-03 19:47:02

+0

@Incognito - 對不起,我沒有直接從代碼複製粘貼,所以我忘了輸入逗號。儘管我在我的實際代碼中有這個。 – sadmicrowave 2011-06-03 19:50:46

回答

3

您需要包含beforeClose回調函數的兩個可選參數。

$('.myModal').dialog({title: 'dialog 1' 
        beforeClose: function(event,ui){ //do something }}).dialog("open"); 

您需要檢查事件和/或ui變量並確定是否按下了「X」。

+0

什麼是事件和UI對象的一些子元素?如果我提醒(event +'\ n'+ ui)'我剛剛得到[Object] [Object] ... – sadmicrowave 2011-06-03 19:41:45

+1

請參閱@bdparrish響應,因爲我認爲他已經明確了它。 – Teddy 2011-06-03 19:53:55

2

你可以附加一個處理程序的關閉按鈕的單擊事件:

$('.myModal') 
    .dialog("widget") 
    .find(".ui-dialog-titlebar-close").click(function() { 

     // do whatever you want here 

    }); 
7

看看這個鏈接...

http://forum.jquery.com/topic/jquery-dialog-close

第四回復下來是一個你尋找,更少他參考這個鏈接。

http://jsbin.com/obafo

...在那裏他建立的示例來查看,裏面有這個代碼...

$("#dialog").dialog({ 

close: function(event, ui) { 

    if (event.originalEvent && 
       $(event.originalEvent.target).closest(".ui-dialog-titlebar-close").length) { 

     $("body").append("do some stuff<br>"); 

    } 

} 

}) 
.find("button") 
.click(function() { 

    $("body").append("just close dialog<br>"); 

    $(this).closest(".ui-dialog-content").dialog("close"); 

}); 
+0

對象子屬性鏈實際上是'event.originalEvent.target.className',該元素的標題實際上是'ui-icon ui-icon-closethick' – sadmicrowave 2011-06-03 19:59:33

2

這是假設你沒有帶改變了顯示爲默認的關閉文本X但密碼爲'close'

$('#acceptsignaturediv').dialog({ 
      title: 'my Title', 
      height: 400, 
      width: 400, 
      buttons: { "Accept": function() { alert('Accept'); }, 
       "Decline": function() { alert('Decline'); } 
      }, 
      beforeClose: function (event, ui) { if (event.originalEvent != undefined && event.originalEvent.srcElement.innerText == "close") { alert('You must accept or decline'); return false; } } 
     }); 
0

我通過檢查originalevent是否有類型單擊的原始事件來解決它。條件相當長,但它的工作原理。

$('.myModal').dialog({ 
    title: 'dialog 1', 
    beforeClose: function(){ 
     if (e.originalEvent && e.originalEvent.originalEvent && e.originalEvent.originalEvent.type == "click") { 
      // do something 
     } 
    } 
}).dialog("open"); 
相關問題