在对话框中加载aspx页面时,JQuery Dialog无法第二次打开

时间:2012-11-30 14:41:24

标签: jquery asp.net html jquery-ui jquery-dialog

我已经检查了类似的问题,但没有人给我一个解决方案...这就是为什么发布这个问题..所以请给我一个解决方案而不是投票...

我在对话框中加载一个aspx页面。它第一次工作正常,但如果我关闭并重新打开它第二次..它没有被打开..

这是我的default.aspx,我正在处理对话框的脚本

       <html>
        <head>
            <script type="text/javascript">
                    $(document).ready(function() {
                    $("#thedialog").dialog({
                            autoOpen: false,
                            modal: true,
                            position: 'center',
                            width: 900,
                            open: function() {
                            $('#thedialog').load("AddDetails.aspx");
                            }
                        });

                         $('#link').click(function() {
                          $('#thedialog').dialog('open');

                        });

                    });
             </script>
        </head>
        <body>
            <div id="thedialog" style="display: none; overflow: hidden">
           <span id="link" style="color: #88b807; margin-left: 839px;
                            margin-top: -12px; cursor: pointer; display: block">Create</span>
</div>
        </body>
        </html>

这是我的AddDetails.aspx

<body>
    <form id="form1" runat="server">
    <div>
        <table id="table" style="border-spacing: 7px 7px; margin-left: 5px">
            <tr>
                <td>
                    <span class="SubHeading">Private Space Name </span>
                </td>
                <td>
                    <asp:TextBox ID="txt_spacename" runat="server" />
                </td>
            </tr>
            <tr>
                <td>
                    <span class="SubHeading">Private Space Description </span>
                </td>
                <td>
                    <asp:TextBox ID="txt_spacedesc" TextMode="MultiLine" runat="server" />
                </td>
            </tr>
</table>
</div>
</form>
</body>

如果我只是打开一个对话框而不是加载页面,它会被打开但是如果我在对话框中加载页面则它不会打开...

...帮助

1 个答案:

答案 0 :(得分:0)

从您更新的代码中,您看到的链接看起来就像您正在加载ajax调用的div内部。如果是这种情况,那么加载对话框的click事件只被绑定一次(在初始页面加载时)。当链接元素再次加载时(我假设它在加载的ajax响应中),它不再绑定点击事件。

要解决这个问题,你可以:

  1. 将您的链接移到#thedialog div元素之外(它看起来不像现在正确关闭)
  2. 修改javascript以添加委托,以便即使页面(DOM)发生更改,click事件也会触发该类型的元素,如:

    $("#thedialog").delegate("#link", "click", function () {
        $('#thedialog').dialog('open');
        return false;
    });
    

    如果对话框本身中存在#link元素,则选项2可能会产生一些奇怪的结果 - 如果这样可以解决问题,我会选择第一个选项。


  3. <强>更新

    以上内容适用于我的浏览器,但为了确保我尝试使用以下代码并查看它是否有效,可能是jquery / jquery ui的版本不是最新的或者不是最新的,我猜

    <html>
    <head>
    <title>Test dialog page</title>
    <link href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css" rel="stylesheet"
        type="text/css" />
    <script src="http://code.jquery.com/jquery-1.8.3.js" type="text/javascript"></script>
    <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $("#thedialog").dialog({
                autoOpen: false,
                modal: true,
                position: 'center',
                width: 900,
                height: 300,
                open: function () {
                    $('#thedialog').load("AddDetails.aspx");
                }
            });
    
            $('#link').click(function () {
                $('#thedialog').dialog('open');
            });
    
        });
    </script>
    </head>
    <body>
    <div id="thedialog" style="display: none; overflow: hidden">
    </div>
    <span id="link" style="color: #88b807; cursor: pointer; display: block">Create</span>
    </body>
    </html>
    

    我会尝试/推荐的其他事项:

    • 从AddDetails.aspx中删除包装体标签(除非你是 以非ajax方式使用它)。还要确保它没有引用母版页。
    • 确保页面上没有其他正在运行的JavaScript - 没有 例如,在AddDetails页面中引用的脚本。
    • 如果您仍然遇到问题,请尝试查看Firebug中的控制台或其他浏览器中的等效内容 - 是报告错误还是静默失败?