4

我有一个 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>
4

3 回答 3

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");
    }
});
于 2013-03-28T16:26:51.237 回答
2

如果lnkEquifaxResponse导致回发,那就是问题所在。回发后,对话框将重新呈现为已关闭。您使用的是 UpdatePanels 还是其他任何东西?

于 2013-03-28T16:28:38.610 回答
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;
    }
},
于 2013-03-28T16:50:22.493 回答