1

我有一个 aspx 页面,我将其加载到通过 JQuery 对话框显示的 iframe 中。该页面有一个取消按钮,该按钮调用成功关闭 JQuery 对话框的“CloseMe”脚本。该页面还有一个回发的保存按钮。保存数据后,我想关闭对话框。

我已经尝试注册一个在 document.ready 上调用“CloseMe”函数的启动脚本。当我这样做时,代码开始在 JQuery 中抛出没有意义的 javascript 错误。像“数组未定义”和“函数未定义”和“日期未定义”。编辑:它在遇到“window.parent.$...(close) 语句时执行此操作。请注意该行之前的警报。它正确报告了 iframe 的 ID。

我从取消按钮使用相同的“CloseMe”功能,一切正常。

编辑:在调试器中忽略所有 25 个左右的错误后,对话框关闭。

这是打开对话框的 javascript:

function jQueryShowiFrame(url, title, reloadOnClose) {

    $('<iframe id="modalIframeId" allowtransparency="true" frameborder="0" src="' + url + '" />').load(function () {

        var width = $("#modalIframeId").contents().width();
        var height = $("#modalIframeId").contents().height();
        var paddingWidth = parseInt($("#modalIframeId").css("padding-left"), 10) + parseInt($("#modalIframeId").css("padding-right"), 10);

        // the sequence of these steps is important
        $("#modalIframeId").dialog("option", "width", (width + paddingWidth) + 'px');

        this.style.width = width + 'px';
        this.style.height = height + 'px';

        $("#modalIframeId").dialog("option", "position", "center");
    })
    .dialog({
        title: title,
        modal: true,
        close: function (ev, ui) {
            $(this).dialog('destroy').remove();
            if (reloadOnClose) {
                location.reload();
            }
        },
        open: function (ev, ui) {
            //alert('x');
        }
    });
}

这是页面标记:

<asp:Button ID="btnSave" runat="server" CssClass="BasicButton" Text="Save" />
<button type="button" id="btnClose" onclick="closeMe()" >Cancel</button>

<script type="text/javascript">

    function closeMe() {
        alert(window.frameElement.id);
        window.parent.$('#' + window.frameElement.id).dialog('close');
    }
</script>

这是保存按钮单击后面的代码:

Dim scr As String = "$(document).ready(function () { closeMe(); });"
ScriptManager.RegisterStartupScript(Me.Page, GetType(Page), Guid.NewGuid.ToString, scr, True)
4

1 回答 1

0
function jQueryShowiFrame(url, title, reloadOnClose) {

    $('<iframe id="modalIframeId" allowtransparency="true" frameborder="0" src="' + url + '" />').load(function () {

        var width = $("#modalIframeId").contents().width();
        var height = $("#modalIframeId").contents().height();
        var paddingWidth = parseInt($("#modalIframeId").css("padding-left"), 10) + parseInt($("#modalIframeId").css("padding-right"), 10);

        // the sequence of these steps is important
        $("#modalIframeId").dialog("option", "width", (width + paddingWidth) + 'px');

        this.style.width = width + 'px';
        this.style.height = height + 'px';

        $("#modalIframeId").dialog("option", "position", "center");
    })
    .dialog({
        title: title,
        modal: true,
        /*Add a Property */
        autoOpen : false, /* Instead of Calling 'CloseMe' */
        close: function (ev, ui) {
            $(this).dialog('destroy').remove();
            if (reloadOnClose) {
                location.reload();
            }
        },
        open: function (ev, ui) {
            //alert('x');
        }
    });
}

用于autoOpen:false防止在启动时打开对话框。使用它而不是调用CloseMe函数。

希望能帮助到你。

于 2013-10-22T16:22:57.653 回答