我正在创建JQuery对话框,并且需要关闭功能才能导致回传到父窗体(以便弹出窗体中更改的数据立即显示在父窗口上)。我编写了代码并且对话框就位。但是,有一个问题。在IE中,当我关闭弹出窗口并发生回发时,我收到此javascript错误,指出“对象不支持此属性或方法”,它指的是创建对话框的代码块。
只是一些背景:带弹出窗口的页面是一个aspx页面,其中有许多区域显示可以更改的数据库信息。此页面使用母版页。弹出窗口包含一个iframe,我根据点击的按钮更改了源代码。我希望对我们拥有的许多弹出窗体使用相同的对话框和弹出窗口。
这是javascript。它位于$(document).ready部分:
//Source of IE error
$("#popup").dialog({
bgiframe: true,
resizable: false,
height: 217,
modal: true,
autoOpen: false,
close: function()
{
$('#aspnetForm').submit(); //Submit the parent form to cause postback
}
});
$("#BHSubmitBtn").click(function()
{
var splitChar = $("#ctl00_Main_splitCharacter");
var queueId = $("#ctl00_Main_queueId");
var siteName = $("#ctl00_Main_siteName");
var queryString = "Add" + splitChar + siteName + splitChar + queueId;
$("#popupFrame").attr('src', 'BusinessHoursSubForm.aspx?var1=' + queryString);
$("#popup").dialog('open');
});
这是我突然出现的div:
<div id="popup" title="Business Hours" >
<iframe id="popupFrame" src=""></iframe>
</div>
这是打开表单的按钮:
<input class="clsSubmitBtn" id="BHSubmitBtn" type="button" value="Add" />
我已经尝试了很多不同的方法来处理这个问题,大多数都是以ui.dialog开头的javascript错误(上面的那个)开头的:
$.widget('ui.dialog', ...)
或我的javascript。
有人能想到为什么会这样吗?我已经让它工作了(使用回发)但我不得不剥离除了我正在处理的部分之外的所有内容的页面,但是没有任何我能看到的会导致它的内容。
答案 0 :(得分:1)
您可以使用__doPostback('XYZ,'');而不是编写submit()来提交表单以进行回发。导致回发发生。
答案 1 :(得分:0)
我认为您需要像这样访问父文档。
$('#aspnetForm', window.parent.document).submit();
答案 2 :(得分:0)
问题是ASP.NET生成的页面取决于一些全局javascript值。您注入的对话框可能会覆盖这些值。我解决这个问题的方法是让一个对象在加载对话框之前保存当前状态,然后在完成后恢复它。
要确定需要保存的值,您需要小心查看作为对话框加载的页面。查看所有脚本标记。我发现值得保存/恢复的一些值是:“__ doPostBack”,“theForm”,“WebForm_OnSubmit”,“Page_Validators”,“ValidatorOnSubmit”,“Page_ValidationActive”,“ValidatorOnChange”
当您在对话框中使用更多ASP.NET功能时,此列表将会增长。
答案 3 :(得分:0)
实际问题与表单的回发方式无关。问题(呻吟)是我们使用现在已弃用的SmartNav页面属性(我的任务的一部分是摆脱这个)并且由于某种原因它导致错误(可能是因为smartNav在后台做了什么)。一旦我从它工作的所有页面中删除它。