我在div中有一个按钮,默认情况下是隐藏的,因为它被jQuery UI用作模式弹出窗口。
此按钮的click事件处理程序永远不会被调用,但如果我将按钮代码复制到此隐藏div之外,则它可以正常工作。我该如何解决这个问题?
这是我到目前为止的代码:
<div id="dialog" title="Notify Users">
<div style="width:100%; height:500px; overflow:auto;">
<asp:Repeater runat="server" ID="rptNotify">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:CheckBox ID="chkUser" runat="server" Checked='<%# Eval("Checked") %>' />
</td>
<td>
<asp:Label ID="lblUser" runat="server" Text='<%# Eval("FullName") %>'/>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</div>
<asp:Button ID="btnSaveNotifications" runat="server" Text="Save" OnClick="btnSaveNotifications_Click" />
</div>
显示/隐藏此div的代码是:
<script>
// Increase the default animation speed to exaggerate the effect
$.fx.speeds._default = 1000;
$(function () {
$("#dialog").dialog({
autoOpen: false,
show: "blind",
hide: "explode"
});
$("#opener").click(function () {
$("#dialog").dialog("open");
return false;
});
});
</script>
答案 0 :(得分:12)
这里的问题是jQuery-UI创建了<form>
元素的外部对话框,因此点击它永远不会提交表单。
要解决此问题,您可以将对话框<div>
移回表单,而不是手动创建点击事件。我做了一个快速搜索,答案to this question已经涵盖了这个问题。
所以你只需要做出这个改变:
<script>
// increase the default animation speed to exaggerate the effect
$.fx.speeds._default = 1000;
$(function () {
var dialog = $("#dialog").dialog({
autoOpen: false,
show: "blind",
hide: "explode"
});
// Move the dialog back into the <form> element
dialog.parent().appendTo(jQuery("form:first"));
$("#opener").click(function () {
$("#dialog").dialog("open");
return false;
});
});
</script>
答案 1 :(得分:1)
转变将是将您的按钮事件更改为客户端事件,然后从客户端触发服务器端事件。
请参阅Stack Overflow问题 How to fire a button click event from JavaScript in ASP.NET 。
答案 2 :(得分:0)
请注意,在对话框中使用iFrame时会产生分歧。移动带有iFrame的div会导致iFrame发布两次或更多次。如果你已经实现了这个,我会检查你的情况是否属实。我发布了一个我在这里找到的解决方法:https://stackoverflow.com/a/24663205/3334255