我在更新面板中有一个带有复选框和几个文本字段的小表单。当用户选中该复选框时,文本字段将预填充值。当用户取消选中该复选框时,将清除文本字段。用户单击复选框时更新面板会更新
我还添加了一个小的javascript,当用户手动修改任何文本框时,取消选中该复选框。
我的问题是文本框在手动修改后不会预先填充。这是我采取的步骤
第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 :(得分:0)
您可以将click事件绑定到任何目标。所以简单地做一些像
这样的事情$(':checkbox').click(function() {
//for server side response
$.ajax(); //....
});
http://http://api.jquery.com/jQuery.ajax/
每次单击复选框时都会触发。当然,如果要定位特定的复选框,则必须更明确地使用选择器