2011-09-30 126 views
3

在我的网页上,我有一个打开模式jQuery对话框的按钮。当单击按钮时运行的代码如下:jQuery UI对话框不会关闭

$('#main-onoffline-container').append('<div id="dialog-modal-a"></div>'); 

    $("#dialog-modal-a").dialog({ 
     title:'Add Tags' 
     , autoOpen: false 
     , modal: true 
     , height: 540 
     , width:700 
     , close: function (ev, ui) { alert('closing'); } 
     ,open: function() { 
      $("#dialog-modal-a").html('Some html will go here') 
     } 
    }); 

    $("#dialog-modal-a").dialog("open"); 

正如你所看到的,我加入一个div到DOM,然后调用对新添加的格对话框方法。

对话框打开并显示html和X关闭按钮。但是,当我点击X按钮关闭对话框时,它不会关闭。控制台从jquery-1.6.4.min.js中显示以下错误:

Uncaught RangeError: Maximum call stack size exceeded 

任何人都知道问题是什么?

UPDATE: 我已经发现,某些JS库的顺序影响这个冗长的会议后:

如果我包括文件如下则将出现问题:

<script src="../../Scripts/jquery-1.6.4.min.js" type="text/javascript"></script> 
<script src="../../Scripts/jquery-ui-1.8.7.min.js" type="text/javascript"></script> 
<script src="../../Scripts/jquery.validate.min.js" type="text/javascript"></script> 

如果我包括如下文件然后问题消失:

<script src="../../Scripts/jquery.validate.min.js" type="text/javascript"></script> 
<script src="../../Scripts/jquery-1.6.4.min.js" type="text/javascript"></script> 
<script src="../../Scripts/jquery-ui-1.8.7.min.js" type="text/javascript"></script> 

这似乎真奇怪 - 我认为你应该在文件的顶部包含核心jQuery的东西吗?

(该验证LIB是乔恩Zaefferer插件)

我提出一个不同的问题借此向前:jQuery library include order causes error

+0

这是您在该页面上唯一的代码吗?这可能与此无关,看起来浏览器内存不知何故。 –

+0

我有大量的其他代码在页面上运行,有很多Javascript对象被创建和操作。但是,直到此刻,没有任何事情导致任何控制台错误出现。 – Journeyman

+0

如果你把这段代码拿出来,一切都还好吗?我这样说的原因是因为当前的代码在这个小提琴中工作正常http://jsfiddle.net/BHaEj/13/ –

回答

1

的问题是由于JS库冲突 - 请参阅我的最后评论中的主要问题

+0

我有与twitter引导2.3相同的问题,这与jquery-ui冲突。 https://github.com/twitter/bootstrap/issues/6887 – basgys

0

尝试拔出功能$ .dialog关闭事件处理的:

$(".selector").bind("dialogclose", function(event, ui) { 
    ... 
}); 
+0

好吧,我已经尝试过,事件处理程序不会被调用 - 处理程序被调用之前的错误触发器 – Journeyman

+0

我可以建议的唯一事情:在发生错误的位置放置断点,并检查调用堆栈。 – Microfed

0

不确定为什么你要将对话框追加到页面上并立即打开它。我假设你已经遗漏了代码。一般用这个插件让你想要做的是:

在HTML创建对话框容器:

<div id="dialog-modal-a"></div> 

初始化它在$()准备就绪()(默认情况下隐藏它时,autoOpen: false),然后打开一个事件或页面加载:

$().ready(function() { 
    $("#dialog-modal-a").dialog({ 
     title:'Add Tags', 
     autoOpen: false, 
     modal: true, 
     height: 540, 
     width:700, 
     close: function (ev, ui) { alert('closing'); } 
    }); 

    $('#somethinkToClick').click(function() { 
     $('#dialog-modal-a').html('some html'); 
     $("#dialog-modal-a").dialog("open"); 
    }); 

    /* OR 
    $('#somethinkToClick').click(function() { 
     $('#dialog-modal-a').html('some html'); 
     $("#dialog-modal-a").dialog("open"); 
    }); 
    */ 
} 
+0

您不必在之前创建对话框,在DOM中注入div然后将其用于对话框没有任何问题,工作得很好。 http://jsfiddle.net/BHaEj/13/ –

0

我有一个SIM卡Ilar错误,.dialog('destroy')为我做了诡计。可能仍然存在js版本不匹配。