簡體   English   中英

通過jQuery slideToggle顯示div並通過updatepanel中的隱藏按鈕運行服務器代碼后,div單擊不起作用

[英]div click not working after showing div by Jquery slideToggle and run server code by hidden button in updatepanel

我正在使用jQuery slideToggle顯示/隱藏div

當div打開時,我調用按鈕單擊事件以運行服務器代碼

div應該在updatepanel中-以避免在頁面中完全回發

javascript:

$(document).ready(
 function () {
     $(".header").click(function () {
         var $header = $(this),
    $span = $header.find(">:first-child"),
         //getting the next element
    $content = $header.next();
         //open up the content needed
         $content.slideToggle(500);
         if (this.id == "ContentPlaceHolder1_AAA_divheader") {
             document.getElementById('<%= btnPostback.ClientID %>').click();
         }

     });
 });



 <asp:UpdatePanel ID="up1" runat="server" UpdateMode="Conditional">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="btnPostback" EventName="Click" />
    </Triggers>
    <ContentTemplate>
        <div id="divheader" runat="server" class="header">
            <span class="ProName">
                <asp:Label ID="Label8" Text="<i class='fa fa-plus-square fa-lg'></i>" runat="server"></asp:Label>
                <asp:Label ID="Label9" runat="server">Title</asp:Label>
            </span>
        </div>
        <div id="divcontent" runat="server" class="content">
 <asp:Button runat="server" ID="btnPostback" Style="display: none" OnClick="LoadData" />        
            <div id="divIfA" runat="server">
            </div>
            <div id="divifB" runat="server">
            </div>               
        </div>
    </ContentTemplate>
    </asp:UpdatePanel>

C#:

  public void LoadData(object sender, EventArgs e)
{
    if (Session["IfOpen"] == null)
        Session["IfOpen"] = "1";
    else
        if (Session["IfOpen"].ToString() == "1")
            Session["IfOpen"] = "0";
        else
            Session["IfOpen"] = "1";


    if (ID > 0 && Session["IfOpen"].ToString() == "1")       
    {
       //run my code to create user control in the divIfA/divIfB
    }
    if (Session["IfOpen"].ToString() == "1")
    {
        //The (partial) postback closed the div so I open It again
        ScriptManager.RegisterStartupScript(up1, up1.GetType(), "MyFunction", " $('#ContentPlaceHolder1_AAA_divcontent').slideToggle(500);", true);
    }

}

問題:

運行此代碼時,div會在第一次單擊時打開,然后單擊事件根本不會觸發 (而且div的內容也變得不可單擊)

所以,我想 btnPostback點擊, 無需在UpdatePanel,一切運作良好(但頁面刷新)

我嘗試使用 UpdatePanel, 而不調用btnPostback Click,div正常顯示/隱藏(當然沒有來自服務器的數據)

我還需要UpdatePanel和服務器代碼。 有誰知道為什么會這樣?

<asp:UpdatePanel ID="up1" runat="server" UpdateMode="conditional">
            <ContentTemplate>
                <div id="divheader" runat="server" class="header" onclick="headerClick(this);">
                    <span class="ProName">
                        <asp:Label ID="Label8" Text="<i class='fa fa-plus-square fa-lg'></i>" runat="server"></asp:Label>
                        <asp:Label ID="Label9" runat="server">Title</asp:Label>
                    </span>
                </div>
                <div id="divcontent" runat="server" class="content">
                        <asp:Button runat="server" ID="btnPostback"  CssClass="hidden-btn" OnClick="LoadData" />
                    <div id="divIfA" runat="server">
                    </div>
                    <div id="divifB" runat="server">
                    </div>
                </div>
            </ContentTemplate>
        </asp:UpdatePanel>

Javascript:

function headerClick(obj)
        {
     var $header =$(obj).val();
    $span = $header.find(">:first-child"),
         //getting the next element
    $content = $header.next();
         //open up the content needed
         $content.slideToggle(500);
         if (obj.id == "ContentPlaceHolder1_AAA_divheader") {
             document.getElementById('<%= btnPostback.ClientID %>').click();
         }
}

在這里,我在Div上添加了onClick方法,只需替換並嘗試,它就可以正常工作了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM