【问题标题】:jQuery Show/Hide not working after postback回发后 jQuery Show/Hide 不起作用
【发布时间】:2012-11-06 16:36:08
【问题描述】:

我在回发后使用 jQuery 显示隐藏的 div 后遇到问题。有人建议我将可见性值存储在隐藏字段中,但我遇到了一些问题。代码如下:

<script type="text/javascript">
$(document).ready(function () {
    $(".slidingDiv").hide();
    $(".show_hide").show();
    $("goBtn").click(function () {
        $(".slidingDiv").slideToggle();
    });
    return false;
});  
</script>

<div class="create">
            <asp:TextBox ID="createTextbox" runat="server" Width="350px" Height="22px"></asp:TextBox>
            <asp:ImageButton ID="goBtn" ImageUrl="img/goBtn.gif" runat="server" BorderStyle="None" onclick="createButton_Click"/>
        </div>
 <div class="slidingDiv" runat="server">
        <asp:HiddenField ID="IsCreatePostbackVisible" runat="server" Visible="False" value="false"/>
            <asp:Literal ID="Literal1" runat="server"></asp:Literal><br />
        </div>

代码隐藏:

    protected void createButton_Click(object sender, ImageClickEventArgs e)
    {
        string randAlias = Base62Random();
        string aliasInput = createTextbox.Text;
        DateTime date = DateTime.Now;
        DateTime endDate = (DateTime.Now.AddYears(5));
        string UserID = HttpContext.Current.User.Identity.Name.ToUpper();
        string aliasType = "alias";
        if (aliasInput == "")
        {
            ClientScript.RegisterClientScriptBlock(GetType(), "Javascript", "<script>alert('You must enter a valid URL')</script>");
        }
        else
        {
            Literal1.Text = "<a href=http://go/" + randAlias + ">go/" + randAlias;
        }


        using (DataClasses1DataContext dc1 = new DataClasses1DataContext())
        {
            tblData tblData = new tblData();
            tblData.ALIAS_ID = randAlias;
            tblData.URL = aliasInput;
            tblData.START = date;
            tblData.END = endDate;
            tblData.USER = UserID;
            tblData.TYPE = aliasType;
            dc1.tblDatas.InsertOnSubmit(tblData);
            dc1.SubmitChanges();
        }
    }

【问题讨论】:

  • 设置为goBtn 的事件不起作用?如果是,设置#,因为是id
  • 添加 # 后我得到了相同的行为。似乎在回发之后,div 正在通过 $(".slidingDiv").hide(); 重新隐藏;
  • 这些 html 元素中的任何一个都是在回调操作中创建的?
  • 这里有一个类似的问题>>forums.asp.net/t/1527207.aspx/1
  • buttonClick之后,生成的Base62字符串写入字面量,但slidingDiv保持隐藏状态。

标签: jquery c#-4.0 postback


【解决方案1】:

您可能需要将点击事件“重新注册”到您的按钮。

我过去在隐藏和回发方面遇到过类似的问题。

如果你定义一个函数:

 function ClickListener() {
    $("#goBtn").click(function () {
            $(".slidingDiv").slideToggle();
            ClickListener();
        });
    }

然后希望它会不止一次地工作。

编辑:我也遇到过类似的问题,将 document.ready() 更改为 document.live() 已经解决了问题。见这里:jQuery difference between live() and ready()?

【讨论】:

  • 切换到 live() 不起作用并引发 jQuery 错误。 div 也不再隐藏。网页错误详情用户代理:Mozilla/4.0(兼容;MSIE 8.0;Windows NT 6.0;WOW64;Trident/4.0;SLCC1;.NET CLR 2.0.50727;.NET CLR 3.0.30729;.NET4.0C;.NET4.0E ; .NET CLR 3.5.30729) 时间戳:2012 年 11 月 6 日星期二 17:00:35 UTC 消息:“未定义”为空或不是对象行:2764 字符:3 代码:0 URI:ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js
【解决方案2】:

这是我最终得到的答案:

<script type="text/javascript">
    $(document).ready(function () {
    $(".slidingDiv").hide();
    $(".show_hide").show();
    $("#goBtn").click(function () {
        $(".slidingDiv").slideToggle();
    })
    if (isPostBack){$(".slidingDiv").show();}
});  
</script>

代码背后:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack)
        {ClientScript.RegisterClientScriptBlock(GetType(), "IsPostBack", "var isPostBack = true;", true);}
        else 
        {ClientScript.RegisterClientScriptBlock(GetType(), "IsPostBack", "var isPostBack = false;", true);}
    }

【讨论】:

    最近更新 更多