【问题标题】:Jquery Dialog show: blind, hide: drop; only working onceJquery Dialog 显示:blind,隐藏:drop;只工作一次
【发布时间】:2012-02-12 20:11:10
【问题描述】:

我有以下代码:

$("#dialog").dialog({
    height: 360,
    width: 630,
    modal: true,
    autoOpen: false,
    show: 'blind',
    hide: 'drop',
    resizable: false,
    dialogClass: 'noFloat'
});

$("#openDiag").click(function() {

    $("#dialog").dialog('open');

    $.ajax({
        type: "POST",
        url: "setHsdSegment.jsp",
        dataType: "html",
        resizable: false,
        //data:"name="+name+"&age="+age,
        success: function(data) {
            $("#response").html(data);
        }
    });
});

我面临的问题是,显示和隐藏只工作一次。如果我再次单击按钮(#openDialog),则只显示半透明屏幕而不显示对话框。

有趣的是,这只发生在 hide 是 'drop' 并且 show 是除了 'drop' 之外的任何东西时。但是当节目是“放弃”而隐藏是其他东西时,一切都很好。

当隐藏为“drop”时,show 是否必须为“drop”?

编辑:这仅在 IE 中发生。 (像往常一样,IE 引起了问题。:D...为什么?)

【问题讨论】:

    标签: jquery internet-explorer jquery-ui jquery-dialog


    【解决方案1】:

    这是 jQuery UI 中的一个已知错误: http://bugs.jqueryui.com/ticket/5615

    快速解决方法是销毁并重新创建对话框:

    var $dlg = $("#dialog");
    var dlgOptions = $dlg.dialog("option");
    $dlg.dialog("destroy");
    $dlg.dialog(dlgOptions);
    

    这表明对话框离开屏幕并在下次显示时忘记返回(除非“show”设置为“drop”,这正好相反)。

    【讨论】:

      【解决方案2】:

      在这个演示中似乎运行良好:http://jsfiddle.net/william/mQkH7/

      也许尝试升级/降级您的 jQuery UI。

      【讨论】:

      • 我有 jquery 1.4.2 和 jquery-ui 1.8.4。但它仍然无法正常工作。但是你知道为什么这只发生在这种特殊情况下吗?
      • 可能有多种原因。找出答案的一种方法是在调用 $('#dialog').dialog('open') 时单步执行 jQuery 和 jQuery UI 中的每一行代码。
      【解决方案3】:

      我找到了解决方法。不确定这是否是最好的方法,但它确实有效。 如下:

       $("#openDiag").click(function(){
        $('#dialog').dialog('destroy');
         $("#dialog").dialog({
                          height: 360,
                          width: 630,
                          modal: true,
                          autoOpen: true,
                          show: 'slide',
                          hide: 'drop',
                          resizable: false,
                          dialogClass: 'noFloat',
                          buttons: { "Ok": function() { $(this).dialog("close"); 
      
                                                      } }
                      });
      

      似乎对于 IE,我需要在创建新的之前销毁对话框插件。我一开始就保留了“破坏”,因为我想保持结束效果。我在这里缺少的是在销毁插件之前检查插件是否存在。但它仍然可以正常工作;我不知道为什么。

      但这仍然没有回答问题,为什么问题首先存在,仅针对此特定组合且仅在 IE 中。谁能告诉我原因?

      【讨论】:

      • 一个更干净的解决方案可能是在对话框关闭时销毁它:jsfiddle.net/william/mQkH7/1。我没有 IE,所以无法为您测试。
      猜你喜欢
      • 1970-01-01
      • 2016-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多