使用Javascript更改表单值后,更新面板不会更新

时间:2010-10-08 18:33:14

标签: jquery asp.net-ajax

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

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

我的问题是文本框在手动修改后不会预先填充。这是我采取的步骤

  1. 单击复选框(这会导致异步回发并填充文本框)
  2. 修改文本框的内容(这会导致运行javascript并取消选中DOM Scripting复选框,不会发生异步回发)
  3. 再次单击复选框(这应该会导致异步回发,并且文本框应该在步骤1中恢复为其值,但没有任何反应)
  4. 第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;
                }
            }
    

1 个答案:

答案 0 :(得分:0)

您可以将click事件绑定到任何目标。所以简单地做一些像

这样的事情
$(':checkbox').click(function() {
  //for server side response
  $.ajax(); //....
});

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

每次单击复选框时都会触发。当然,如果要定位特定的复选框,则必须更明确地使用选择器