2013-11-22 34 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/

相关问题