所以我所拥有的是一个表单,这个表单的一部分将用于创建一个jquery对话框。从该对话框是一个从asp服务器控件创建的按钮,我将单击该按钮。服务器控件在后面的代码中有一个函数,单击时将调用该函数。我遇到的问题是后面的代码中的函数没有被调用。我缺少哪些基本的东西?这是aspx页面的样子,剥离到最低限度
<head>
<script>
function PreviewForm() {
$("#emailPreview").attr("style", "");
$("#emailPreview").dialog({
title: "Preview",
width: "890px",
modal: true
});
}
</script>
</head>
<body>
<form id="EmailSend" method="post" runat="server">
<table>
<tr>
<td style="text-align:right">
<input type="button" onclick="PreviewForm();" value="Preview" />
</td>
</tr>
</table>
<div id="emailPreview" align="center" style="display:none">
<fieldset>
<table>
<tr class="Row">
<td class="required">Subject:</td>
<td><asp:Label ID="lblSubj" Runat="server" /></td>
</tr>
<tr>
<td class="field" colspan="2" style="text-align:center">
<input id="btnBack" class="button" type="button" onclick="closeDialog(false);" value="Close" />
<asp:Button ID="Send" class="button" Runat="server" Text="Send"/>
</td>
</tr>
</table>
</fieldset>
</div>
</form>
和后面代码中的函数
Private Sub CmdSendClick(ByVal sender As System.Object, ByVal e As EventArgs) Handles Send.Click
lblSubj.Text.Trim(), pBody)
End Sub
当我尝试调试代码时,事情没有发生,断点没有被击中。如果我要使按钮可见并从我创建的对话框外部单击,那么它将正常工作。
修改
我也尝试过将对话框隐藏在对话框之外,然后在对话框关闭后单击按钮。所以closeDialog函数看起来像这样一个新的输入按钮
function closeDialog(send) {
console.log(send);
if (send) {
$("#emailPreview").dialog("close");
GetFormControl('<%=Send.ClientID%>').click();
console.log(send + " TRUE");
} else {
$("#emailPreview").dialog("close");
console.log(send + " false");
}
}
<div id="emailPreview" align="center" style="display:none">
<fieldset>
<table>
<tr class="Row">
<td class="required">Subject:</td>
<td><asp:Label ID="lblSubj" Runat="server" /></td>
</tr>
<tr>
<td class="field" colspan="2" style="text-align:center">
<input id="btnBack" class="button" type="button" onclick="closeDialog(false);" value="Close" />
<input type="button" onclick="closeDialog(true);" value="Send Email" />
</td>
</tr>
</table>
</fieldset>
</div>
<asp:Button ID="Send" class="button" Runat="server" Text="Send"/>
</form>
我实际上得到了错误
SCRIPT5007: Unable to get property 'click' of undefined or null reference
编辑2
根据要求,我也知道使用eval,不是没有,但我在这里维护其他代码。所以让我们假装它没问题
function GetFormControl(fControlName) {
var oControl = eval('document.EmailSend.' + fControlName);
if (oControl == null)
oControl = GetPageElement(fControlName);
return oControl;
}
答案 0 :(得分:0)
问题是jQuery UI Dialog函数在表单元素之外附加了对话框的HTML。有关解决方案,请参阅以下问题:jQuery UI Dialog with ASP.NET button postback
答案:改变
$("#emailPreview").dialog({
title: "Preview",
width: "890px",
modal: true
});
到
var diag = $("#emailPreview").dialog({
title: "Preview",
width: "890px",
modal: true
});
diag.parent().appendTo(jQuery("form:first"));