2013-11-22 30 views
5

有沒有一種方法可以連接到jQuery UI對話框上的關閉(x)按鈕,以便您可以提供專用的事件處理程序?使用「close」或「beforeclose」事件不起作用,因爲如果在對話框中還有其他按鈕也會導致對話框關閉,那麼您總是要打「close」和「beforeclose」事件,這是不可取的。我想要一種方法來運行close(x)按鈕中的特定代碼。jQuery UI對話框中關閉(x)按鈕的專用事件處理程序

回答

3

你可以嘗試:

$(document).on('click','.ui-dialog-titlebar-close',function(){ 
    //close button clicked 
}); 
1

據我知道有沒有辦法直接連線到該按鈕,但你可以通過添加dialogClass和接線自己的事件處理程序做具體到您的彈出式的東西:

var dialogClass ="yourPopupTitle"; 

$(document).on('click', '.'+ dialogClass +' .ui-dialog-titlebar-close', function() { 
    handleEvent(); 
}); 

FIDDLE

9

每當一個事件導致一個jQuery UI控件內的另一個事件,始終包含在事件Ø原始事件bject。在這種情況下,您可以查看傳遞給close回調或dialogclose事件的事件對象,並檢查event.originalEvent是否存在。如果是這樣,那麼你可以假設對話框是通過點擊關閉按鈕關閉的。這也適用於beforeclose

如果您想確保它是標題欄中的關閉按鈕,那麼您可以檢查event.originalEvent.target並使用.closest()檢查課程或DOM位置。

這裏顯示了動作中的一個jsbin:http://jsbin.com/ajoheWAB/1/edit

0

我相信這是你正在尋找的解決方案 - 您需要解除綁定click事件和自定義處理程序重新綁定到它。

雖然這個線程很舊,但我仍然在這裏添加我的解決方案,希望能夠讓那些搜索它的人受益。

var fnCustomerHandler = function() { 
    alert("Here is your custom handler..."); 
}; 

$("#dialog").dialog({ 
     open: function(event, ui) { 
      var el = $(this).closest('.ui-dialog').find('.ui-dialog-titlebar-close'); 
      el.off(); 
      el.on("click", fnCustomerHandler); 
     } 
    } 
); 

小提琴鏈接:

http://jsfiddle.net/morefool/n82649d5/

相關問題