这个问题会让我发疯,我正在寻找解决方案;
我在我的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 函数。
出现这种情况的原因是因为按钮是在表单中并且按钮有
type="submit"
onClick
处理程序,您需要将按钮设置为
type="button"
我会尽量避免使用 iframe 只是为了显示模式弹出窗口。