dialog 未返回 true,因此由于事件发生而未触发 onClick

问题描述 投票:0回答:1

这个问题会让我发疯,我正在寻找解决方案;

我在我的asp.net页面中创建了一个隐藏的div,并创建了一个JavaScript函数,当单击asp.net按钮时将其显示为对话框,该JavaScript函数由onClintClick触发;一切都工作正常。

我在该div中添加了一些asp.net控件,这里出现了一些问题。一旦单击控件,整个页面就会进行回发并且 div 会被隐藏,这不会与用户进行交互会话。

在这一点上我找到了一个解决方案,该解决方案更有用并且使对话可重用。我在 div 中添加了一个 iframe 并使其显示外部页面。这样,当用户与 iframe 中的页面交互时,对话框(在本例中为弹出 div)将不会进行回发。到目前为止一切顺利。

现在,我需要一种内部页面与 div 对话的方式(在本例中,div 是父级)来关闭它,返回值可以是:true 或 false(记住 div 是对话,并且返回值要么为真,要么为假)。幸运的是,我找到了一种关闭div的方法,但它看起来的问题结束了父级的“线程”。所以看起来等待真/假值的 div 也没有得到。

图片01.jpg:当点击[delete]时,会触发onClientClick函数来显示圆角div,其中包含iFrame以显示另一个页面:

function MyConfirm2(btn, lcWidth, lcHeight, lcTitle, DivID, frm) {
    result = false;
    myDialog = $(DivID);
    document.getElementById('iframepage').src = frm;

    myDialog.dialog({
        title: lcTitle,
        modal: true,
        // appendTo: 'form',
        classes: { "ui-dialog": "lcDialog" },
        width: lcWidth + 20,
        height: lcHeight - 20,
        open: function () {
            $("#myDialogOverlay").show();
        },
        close: function () {
            //debugger;
            $("#myDialogOverlay").hide();
            document.getElementById('iframepage').src = '';
        }
    })
    return result;
}

现在,用户应该从内部页面单击“确定”或“取消”,这应该与外部 div 对话并通知其关闭。下面是触发的 javaScript 函数来执行关闭:

var receiveMessage = function (event) {
    if (event.data == "close-iframe") {
        myDialog.returnValue = true;
        myDialog.dialog("close");
        return;
    } else {
        myDialog.returnValue = false;
        result = false;
        myDialog.dialog("close");
    }
}
window.addEventListener("message", receiveMessage, false);

这里的问题是,虽然关闭完美地执行了它的任务,并且返回值是true,但是它削减了父页面的线程,因此它没有应有的响应;对话即将结束;但关闭不会触发 OnClick 事件,该事件应该在分配 'true' 并调用 myDialog.dialog("close"); 后触发

在调试代码时,我发现它返回到

function (event) 并在 myDialog.dialog("close"); 行之后继续执行代码,因为它与 close: function () 无关{ 在打开/关闭代码中

抱歉写了很多细节;但请帮助我并建议如何克服这个问题。

我进行了大量的调试和跟踪,我什至尝试通过 .click() ***硬编码***触发事件; 但这也会触发 onClientClick,最终导致无限循环。

我正在寻找一种方法,让内部页面中的[确定]/[取消]按钮告诉外部div关闭并触发onClick。或者触发 onClick 事件而不触发 onClientEvent 的方法。

javascript asp.net vb.net dialog
1个回答
0
投票
让我尝试解决您最初的问题,而不是通过 iframe 解决您的解决方法。

听起来你最初的问题是,当你单击按钮时,它会进行回发而不是执行你的 JavaScript 函数。

出现这种情况的原因是因为按钮是在表单中并且按钮有

type="submit"


为了防止回发并让 javascript 执行

onClick

 处理程序,您需要将按钮设置为 
type="button"

我会尽量避免使用 iframe 只是为了显示模式弹出窗口。

© www.soinside.com 2019 - 2024. All rights reserved.