2010-10-08 101 views
0

我在更新面板中有一个带有复选框和几个文本字段的小表单。当用户选中复选框时,文本字段会预填充值。当用户取消选中复选框时,文本字段被清除。当用户单击复选框时更新面板更新使用Javascript更改表单值后更新面板不会更新

我还添加了一个小的JavaScript,用于在用户手动修改任何文本框时取消选中该复选框。

我的问题是,在手动修改它们之后,文本框不会预填充。下面是我采取

  1. 步骤点击复选框(这会导致异步回并填充文本框)
  2. 修改文本框的内容(这会导致运行JavaScript与DOM脚本取消选中该复选框,没有异步回发生)
  3. 再次单击该复选框(这一点应引起异步回发,并在文本框应恢复其值在步骤1中,但没有任何反应)

第3步不进行回传,但。问题在于CheckChanged事件在服务器端触发,直到用户再次单击该复选框。根据服务器的说法,这是有道理的,在步骤3中没有任何变化。但是,是否有一个事件会在每次单击复选框时触发?

ASP.net代码

<asp:UpdatePanel ID="upContact" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
      <div class="Form ContactForm" style="width: 470px;"> 
       <div style="text-align: right;"> 
        <asp:CheckBox ID="cbxUseInfo" runat="server" CssClass="UsePreset" AutoPostBack="true" OnCheckedChanged="cbxUseInfo_CheckChanged" Text="Use my info" /> 
       </div> 
       <div class="InputPair"> 
        <label>First Name</label> 
        <asp:TextBox runat="server" ID="txtContactFirst" MaxLength="20" /> 
       </div> 
       <div class="InputPair"> 
        <label>Last Name</label> 
        <asp:TextBox runat="server" ID="txtContactLast" MaxLength="100" /> 
       </div> 
      </div> 
     </ContentTemplate> 
</asp:UpdatePanel> 

JQuery的

 $(function() { 
      function setupPresetReset() { 
       $('.ContactForm input[type="text"]').change(function clearPresets() { 
        $('.UsePreset input', $(this).parents('.ContactForm')).attr('checked', false); 
       }); 
      } 

      setupPresetReset(); 
      Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(sender, e) { 
       setupPresetReset(); 
      }); 
     }); 

C#

 protected void cbxUseInfo_CheckChanged(Object sender, EventArgs e) 
     { 
      if (cbxUseInfo.Checked) 
      { 
       txtContactFirst.Text = AppUser.Current.FirstName.Trim(); 
       txtContactLast.Text = AppUser.Current.LastName.Trim(); 
      } 
      else 
      { 
       txtContactFirst.Text = string.Empty; 
       txtContactLast.Text = string.Empty; 
      } 
     } 
+0

代码请,我们需要看你的代码,如果你想我们帮你排除故障 – mcgrailm 2010-10-08 18:38:41

回答

0

可以绑定click事件的任何目标。所以,简单地做类似

$(':checkbox').click(function() { 
    //for server side response 
    $.ajax(); //.... 
}); 

http://http://api.jquery.com/jQuery.ajax/

这将触发每次点击复选框。当然,如果你想要定位一个特定的复选框,你必须更加明确地选择你的选择器

+0

对不起,我没有不清楚。我需要一个服务器端事件。不过谢谢。 – 2010-10-08 18:52:39

+0

好的,但点击复选框是客户端事件。在服务器端发生某些事情。只需用ajax调用'//做点什么'即可。 – dkinzer 2010-10-08 23:01:37

+0

runat =“服务器”使客户端事件服务器端事件。但是该复选框没有服务器端的单击事件 – 2010-10-11 17:42:03