如何在单击其上的链接时关闭JQuery对话框?

时间:2013-03-15 03:25:46

标签: jquery jquery-ui

我在父页面上有一个链接,它打开一个加载文件的对话框.asp具有超链接的表单和数据库结果集。单击一个超链接(单独的.js文件中的JavaScript函数)时,它会将一些信息更新到父页面并尝试关闭对话框。

我有两个问题 1.从.js

中使用$("#myDiv").dialog("close");
function UpdateProdInfo() {
    // some code here to update parent and it works
$("#myDiv").dialog("close"); }

使用关闭功能时会出现初始化错误 2.打开第二次对话时出现问题,仍然初始化错误。

请告诉我怎么办?谢谢QF

4 个答案:

答案 0 :(得分:1)

问题是,由于default2.asp作为动态内容加载到现有页面,因此不应包含htmlbodyhead等所有html元素

如果你删除它们,脚本和css包括jquery.js和jqueryui.css和js它可以正常工作

演示:Problem
演示:Solution

Defaut2.asp应该像

This is Default3.asp file
<br><br>

Something
<a href="Javascript:CloseMe();">Close Me</a>

<br><br>
<form ID=Form2 >
  Name: <input type="text" name="Name"><br>
    Address: <input type="text" name="address"><br><br>
    <input type="submit" value="Submit">
</form>    

<script type="text/javascript">
  $(function() {
    $('#Form2').submit(function(evt) {
            evt.preventDefault();
            $.ajax({
                url: "Default2.asp", 
                type: 'POST',
                data: $(this).serialize(),
                success: function(result) {
                    $('#mydiv').html(result);
                }
            });
        });

        var MyDlg = $( "#mydiv" );

        $(".ui-widget-overlay").click (function () {
            MyDlg.dialog( "close" );
        });
    });

    function CloseMe() {
        $( "#mydiv" ).dialog("close");
    }

</script>

答案 1 :(得分:0)

尝试拨打

parent.$("#myDiv").dialog("close");

因为您的对话框是在父页面中定义的。

答案 2 :(得分:0)

使用context-parameter:

$("#myDiv",parent.document).dialog("close");

答案 3 :(得分:0)

当您尝试关闭尚未打开的对话框时,会发生初始化错误Uncaught Error: cannot call methods on dialog prior to initialization; attempted to call method 'close'

这可能是

  1. dialog('close')在打开之前正在解雇,如果您可以看到对话框,则可以排除
  2. 选择器$('#myDiv')无法以某种方式获得正确的元素。
  3. 我猜它可能是#2。我会尝试调试它......

    function UpdateProdInfo() {
        // some code here to update parent and it works
        console.dir($('#myDiv'));  //Does it return the correct element?
        //$("#myDiv").dialog("close"); 
    }
    

    ...看看它是否正在选择正确的元素。