2011-06-03 41 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"); 
相关问题