【问题标题】:jQuery UI Dialog Box wont reopen after closejQuery UI 对话框在关闭后不会重新打开
【发布时间】:2013-02-14 02:49:26
【问题描述】:

这是我正在使用的代码:

jQuery(document).ready(function($) {
            $('.addNew').click(function(event) {
                event.preventDefault();
                openEditor(event);
            }); /* END ADD CLICK */

            $('.editLink').click(function(event) {
                event.preventDefault();
                openEditor(event);
            }); /* END EDIT CLICK */

            /* DEFINE THE EDITOR OPEN LATER */
            $('.viewer').dialog({
                fullscreen: true,
                show: "pulsate",
                width: $(window).width()-20,
                height: $(window).height(),
                autoOpen: false
            }); /* END OPEN EDITOR */

        }); /* END DOCUMENT READY */

        function openEditor(event) {
            jQuery(document).ready(function($) {
                $('.viewer').load(window.location.pathname + 'edit.php');
                var x =event.pageX - ( $(document).scrollLeft() - 100 );
                var y =event.pageY -$(document).scrollTop();
                $('.viewer').dialog('open');
            }); /* END DOCUMENT READY */
        } /* END OPENEDITOR FUNCTION */

对话框第一次打开得很好,但如果我通过单击关闭按钮或点击退出来关闭对话框,它不会第二次打开。这是我在控制台中收到的错误消息:

TypeError: $(...).dialog is not a function
[Break On This Error]   
$('.viewer').dialog('open');

我最初没有使用 autoOpen: false ,我认为这是问题所在,但是当我改用这种方式时,它仍然给出了同样的错误。

有什么想法吗?

更新:

我一直在挖掘更多,它似乎是由 $('.viewer').load('filename');线。出于某种原因,它只允许查看器打开一次。

【问题讨论】:

  • 你的按钮是动态生成的吗?
  • 否,但查看器中的内容是通过 Ajax 调用加载的,我认为这可能会导致问题。这几乎就像 ajax 加载页面中的 jQuery 正在干扰其他内容。

标签: jquery jquery-ui


【解决方案1】:

我假设您正在重新尝试通过调用 openEditor 来启动对话框?如果是这种情况,请尝试删除对文档就绪的内部调用

function openEditor(event) {
    $('.viewer').load(window.location.pathname + 'edit.php');
    var x =event.pageX - ( $(document).scrollLeft() - 100 );
    var y =event.pageY -$(document).scrollTop();
    $('.viewer').dialog('open');
} /* END OPENEDITOR FUNCTION */

【讨论】:

  • 试过了,无论是否准备好内部文档,仍然得到完全相同的错误。 (这是为了简单的无冲突 jQuery 而添加的)。
  • 我刚刚创建了一个小提琴,它似乎工作得很好:jsfiddle.net/DkdCT(注意:为了小提琴,我注释掉了查看器加载线)
  • 我刚刚更新了这个问题,我发现如果没有将 Ajax 内容加载到查看器中,它可以正常工作。由于某种原因 $('.viewer').load() 弄乱了对话框并且只允许它打开一次,我不知道为什么。
  • 您可以尝试将 3 个后续行放在来自加载回调的回调中,如下所示: $('.viewer').load(window.location.pathname + 'edit.php', function (){ [其他调用]});
【解决方案2】:

我发现这是因为我在加载到 Viewer 类的页面上重新包含了 jQuery,所以我猜你不能重新包含 jQuery 库。

【讨论】:

    猜你喜欢
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    相关资源
    最近更新 更多