JQuery:div在回发时消失了

一切都很好,除了当事件触发时(btnSearch_click)控件(txtSubject,或者日期或者ddlStatus,取决于我从dropdonlist中选择的内容)消失…

这是我的代码……:

 $(document).ready(function() { $('.ddlFilter').change(function() { var sel = $(this).val(); $('#div_date').hide(); $('#div_subject').hide(); $('#div_status').hide(); if (sel === 'Date') { $('#div_date').show(); } else if (sel == 'Subject') { $('#div_subject').show(); } else if (sel == 'Status') { $('#div_status').show(); } }); });  
Filter Results by:
Date Range:
Subject:
Status:

当你的btnSearchclick事件被触发时,你正在完整回发到服务器。 因此,您的ASPX页面将根据您在上面的ASPX页面中定义的方式进行渲染。 在这种情况下, div_datediv_statusdiv_subject呈现为none。 您的选择列表将重置为默认项(这将是第一个ListItem)。

如果要保持相同的行为(完全回发),则需要在回发发生之前跟踪可见内容和选择内容。 我对如何处理这个问题有一些想法。

您可能希望在JavaScript的.change()处理程序中的每个if {}语句中设置一个隐藏的输入元素。 如果该隐藏值设置为runat="server" ,那么您可以在Page_Load期间更轻松地在服务器上获取它的值,然后设置div的正确可见性(尽管这些div也必须是runat="server"除非你动态渲染它们。

  

你的JavaScript会……

 $("#hidCriteria").val("DATE"); //or "STAT" or "SUBJ" depending on what's selected 

在每个if(sel == 'xxx')部分,以便跟踪可见的内容。

我想你也可以将你的div_date,div_status和div_subject更改为asp:Panel,我认为他们的状态(可见或不可见)将保存在viewstate中并保留在回发中。 我不是百分之百确定,但这可能是一个更容易的测试,在隐藏的输入控件之前尝试。

还有一点需要考虑的是,如果btnSearch点击事件是让用户保持在同一页面上,也许你可以将btnSearch的点击事件连接到jQuery $.ajax()调用,以便对服务器进行异步发布以完成你的工作并通过回发保持您的UI不受影响。 你可以这样做:

 $("#btnSearch").click(function() { $.ajax({ url: 'myService.svc/DoSearch', //url you're posting to, type: 'POST', dataType: 'json', //up to you...could be 'xml', 'text', etc. data: { //your search criteria here }, ... }); }); 

对不起,如果这有点长。 希望这可以帮助!