我有一个jQuery对话框,在打开时会立即关闭。它被设置为位于GridView的模板字段中的按钮。
我的JavaScript:
<script type="text/javascript">
$(document).ready(function() {
$("#txtBeginDate").datepicker();
$("#txtEndDate").datepicker();
$("#response").dialog({
autoOpen: false,
modal: true,
title: "Equifax Response"
});
$("[id*=lnkEquifaxResponse]").live("click", function EquifaxResopnse() {
$("#response").dialog("open");
});
});
</script>
我的相关GridView标记:
<div id="Gridview">
<asp:GridView ID="grClientTransactions" runat="server" AllowPaging="True"
PageSize="25" AutoGenerateColumns="False" DataKeyNames="ResponseXML"
EmptyDataText="Record not found." EmptyDataRowStyle-BackColor="#CCCCCC"
EmptyDataRowStyle-Font-Bold="true" CssClass="mGrid"
PagerStyle-CssClass="pgr" AlternatingRowStyle-CssClass="alt"
OnPageIndexChanging="grClientTransactions_PageIndexChanging"
onrowcommand="grClientTransactions_RowCommand">
<Columns>
<asp:TemplateField ShowHeader="false">
<ItemTemplate>
<asp:LinkButton ID="lnkEquifaxResponse" runat="server"
CausesValidation="False"
CommandName="EquifaxResponse"
Text="View"
CommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>'>
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField Visible="false" HeaderText="Equifax Response">
<ItemTemplate>
<asp:Label ID="lblEquifaxResponse" runat="server"
Text='<%# Bind("ResponseXML")%>' >
</asp:Label></div>
</ItemTemplate>
</asp:TemplateField>
</Columns>
我的div显示带有CodeBehind指定字符串的标签:
<div id="response">
<asp:Label ID="lblDialog" runat="server" ></asp:Label>
</div>
答案 0 :(得分:2)
jQuery的live()
方法已在版本1.9中弃用并删除,并已替换为on()
方法。
因此,请更换:
$("[id*=lnkEquifaxResponse]").live("click", function EquifaxResopnse() {
$("#response").dialog("open");
});
用这个:
$("[id*=lnkEquifaxResponse]").on("click", function EquifaxResopnse() {
$("#response").dialog("open");
return false; // Prevents the postback
});
您可以通过其他方式执行此操作:
$(document).ready(function() {
$("[id*=lnkEquifaxResponse]").on("click", function EquifaxResopnse() {
$("#lblDialog").empty();
});
if($("#lblDialog").text() != "")
{
$("#response").dialog("open");
}
});
答案 1 :(得分:2)
如果lnkEquifaxResponse
导致回发,那就是问题所在。在回发后,对话框将重新呈现为已关闭。您使用的是UpdatePanels还是其他任何东西?
答案 2 :(得分:1)
不推荐使用live方法,它应该是这样的,你应该添加一个事件参数来传递给回调。你还需要添加preventDefault();这会阻止锚标记的默认行为
$("[id*=lnkEquifaxResponse]").on("click", function EquifaxResopnse(ev) {
//prevents the default behavior of the anchor tag causing the page to postback or re-render
ev.preventDefault();
$("#response").dialog("open");
});
您也可以在回调结束时添加
return false;
但这在IE中变得非常错误,ev.preventDefault()检查IE以及是否添加return false或returnValue。 IE7喜欢看到这个,否则不会起作用。
ev.returnValue = false;
preventDefault()的源代码在jQuery
中看起来像这样preventDefault: function() {
this.isDefaultPrevented = returnTrue;
var e = this.originalEvent;
if ( !e ) {
return;
}
// if preventDefault exists run it on the original event
if ( e.preventDefault ) {
e.preventDefault();
// otherwise set the returnValue property of the original event to false (IE)
} else {
e.returnValue = false;
}
},