2013-03-28 104 views
4

我有一個jQuery對話框,打開後立即關閉。它被設置爲一個位於GridView模板字段中的按鈕。jQuery對話框立即關閉

我的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顯示一個標籤與代碼隱藏分配的字符串:

<div id="response"> 
    <asp:Label ID="lblDialog" runat="server" ></asp:Label> 
</div> 
+0

什麼是你正在使用jQuery的版本? –

+1

你想回發到服務器嗎?如果沒有,您只需呈現一個普通的項目。或者使用asp:HyperLink。 – Rob

+0

請使用組合鍵「ctrl + Shift + j」檢查Mozilla中的錯誤控制檯,並讓我們知道錯誤,如果有的話。 –

回答

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"); 
    } 
}); 
+0

沒有沒有工作。不過謝謝。 –

+1

我加了'return false'來防止點擊按鈕的默認動作。 –

+0

解決了即時關閉,但知道對話框沒有顯示div的內容。在添加返回false之前,我會得到所需的結果,除了立即關閉窗口。對新問題有任何想法? –

2

如果lnkEquifaxResponse是造成回發,那就是問題。回發後,對話框將被重新渲染爲關閉狀態。你使用的UpdatePanels或其他?

+0

沒有更新面板 –

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以及是否添加返回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; 
    } 
},