jquery ui对话框正在创建两个对话框

时间:2012-05-17 04:23:17

标签: jquery-ui dialog

屏幕截图:http://d.pr/i/A4Kv

这是我的对话框代码:

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');
}

有什么想法吗?

----更新----

我将返回的html替换为一些虚拟文本并修复了它...所以使用放入弹出窗口的html的东西让它打开两次......

5 个答案:

答案 0 :(得分: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(); 
});

这会产生一个对话框。

答案 2 :(得分:1)

  
    

function display_dialog(){if($('。dialog_wrapper')。length){             返回;         }

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

答案 3 :(得分: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++;

为我工作...对于对话问题,但我在服务器上收到多个请求... 类似的东西:当我第一次点击链接时,它会将信息发送到服务器。当我第二次点击(没有刷新浏览器)时,它会发送两次相同的信息。当我第三次点击时,会向服务器发送三个请求,依此类推......

答案 4 :(得分: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>