jQuery Dialog立即关闭

时间:2013-03-28 16:24:35

标签: c# jquery asp.net

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

3 个答案:

答案 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;
    }
},