2012-05-17 117 views
1

截图:http://d.pr/i/A4KvjQuery UI的对话框创建两个对话框

这是我的对话框代码:

function popupbox(title,html,buttonTxt,buttonAction) { 
    var buttons = {}; 
    if(buttonTxt != null) { 
    buttons[buttonTxt] = buttonAction; 
    } 
    buttons['Cancel'] = function() { 
    jQuery(this).dialog('destroy').remove(); 
    }; 
    var p = jQuery('<form class="dialoginnerbox">' + html + '</form>'); 
    p.dialog({ 
    autoOpen: false, 
    resizable: false, 
    modal: false, 
    width: 'auto', 
    height: 'auto', 
    maxHeight: 600, 
    maxWidth: 980, 
    title: title, 
    close: function(event, ui){ 
     jQuery(this).dialog('destroy').remove(); 
    }, 
    buttons: buttons 
    }); 
    p.dialog('open'); 
} 

任何想法?

---- ---- UPDATE

我换出返回HTML的一些虚拟的文字和固定它..这样的东西与被放入弹出的HTML是使其两次打开...

+0

我在弹出框中添加了一个警报,并且它出现了一次。然后我在对话框的打开事件上发出警报,并且它出现两次。出于某种原因,弹出框被调用一次,但两个对话框正在创建...我无法在你的小提琴上重新创建这个http://jsfiddle.net/wtBky/1/ –

回答

4

格式错误的html和内联脚本标记会导致jquery ui对话框打开多个对话框。

+1

和内联脚本标签 –

1

使用jQueryUI对话框;在某些情况下,jQuery可能会将有效的html视为格式错误的html。我这样说的原因是我ajax用有效的html和有效的html注释加载了我的对话框的html。我有双重对话框,直到我从ajax加载的html中删除了html注释。例如...

content.htm

<div id="myDialogContent">Alert!</div><!-- Here is an innocent looking comment --> 

dialog.js

$.get('/content.htm', function(html){ 
    $(html).dialog(); 
}); 

这将产生一个双重对话。如果html以html注释开始或结束,则会出现相同的对话框问题。周围的唯一方法是要么删除HTML注释或在像这样另一个HTML标记放在HTML文本...

dialog.js

$.get('/content.htm', function(html){ 
    $('<div>'+html+'</div>').dialog(); 
}); 

这将产生一个对话框。

0

此问题的解决方法是使用一个计数器:

var count = 0; 
var $dialog = $('<div></div>') .dialog({ ... 

autoOpen: false, 
         modal: true, 
         height: 625, 
         width: 500, 
         title: pagetitle 
... 
}); 

if (count > 0) { 
         $dialog.dialog("destroy").remove(); 
         count = 0; 
        } 
        $dialog.dialog('open'); 
        count++; 

为我工作......在该对话框的问题,但我正在逐渐在服务器上的多个请求...... 类似的东西:当我第一次点击链接时,它将信息发送到服务器。当我第二次点击(不刷新浏览器)时,它发送两次相同的信息。当我点击第三次,三个请求被发送到服务器,等等...

1

功能display_dialog(){如果($( 'dialog_wrapper')。长度){ 回报; }

$('<div class="dialog_wrapper"</div>').dialog({ 
    autoOpen: true, 
    modal: true, 
+2

请添加一些英文解释你的代码。 – hgwhittle

0

如果你换你的HTML在一个单一的标签,它可以清理。 的HTML里面的div的加入可能会导致为每一个对话框,除非有上面的一层:

这并没有为我工作:

<hr /> blah blah blah 
<h3>blahblahtitle</h3> 
<div id=somestufffirst>here's the stuff</div> 
<div id=someotherstuff>here's some more stuff</div> 

但这:

<div> 
<hr /> blah blah blah 
<h3>blahblahtitle</h3> 
<div id=somestufffirst>here's the stuff</div> 
<div id=someotherstuff>here's some more stuff</div> 
</div>