我希望我能够清楚地解释我的问题。
场景:
带有UpdatePanel的Asp.net网页。控件的某些属性可以通过UI触发器更改,并在jQuery中设置(为了更快的响应,因为此页面预计接受每天至少500条记录的输入数据)。
下面的示例,(如果用c#代码编写,逻辑如下:txtIDNumber.Enabled = chkIsReceiptRequired.Checked; rfvIDNumber.Enabled = chkIsReceiptRequired.Checked;
):
标记:
<asp:CheckBox ID="chkReceiptRequired" runat="server" Text="Receipt required" />
<asp:TextBox runat="server" ID="txtIDNumber" Width="150px" style="float: left;" />
<asp:RequiredFieldValidator ID="rfvIDNumber" runat="server" ForeColor="Red"
ErrorMessage="Enter ID No." ControlToValidate="txtIDNumber" ValidationGroup="save" />
默认jQuery代码片段(在页面加载时,未选中chkReceiptRequired,仅在勾选chkReceiptRequired时启用验证器和文本框):
<script type="text/javascript">
function pageLoad(){
$('input[id$=_txtIDNumber]').prop('disabled', true);
ValidatorEnable($("[id$='rfvIDNumber']")[0], false);
$('input[id$=_chkReceiptRequired]').change(function () {
$('input[id$=_txtIDNumber]').prop('disabled', !$(this).is(':checked'));
$('input[id$=_txtIDNumber]').val(!$(this).is(':checked') ? '' : $('input[id$=_txtIDNumber]').val());
ValidatorEnable($("[id$='rfvIDNumber']")[0], $(this).is(':checked'));
});
}
</script>
我使用同一页面在此处加载数据以执行记录更新。数据加载的代码段:
var maintableComponent = new MainTableComponent();
var maintableData = maintableComponent.GetMainTableDataById(rowId);
chkReceiptRequired.Checked = maintableData.IsReceiptRequired.Value;
txtIDNumber.Text = maintableData.IDNumber;
//todo: enable txtIDNumber and rfvIDNumber from here
问题:右边,在页面渲染更新时,因为选中了chkReceiptRequired,所以应该启用txtIDNumber。但我的问题是,事实并非如此。在从代码隐藏加载数据时,我该怎么做才能启用txtIDNumber和rfvIDNumber?
拜托,请帮助我。我在这里发布的片段只是我迫切需要解决的许多jQuery验证之一。提前谢谢。
答案 0 :(得分:0)
现在感到非常愚蠢。弄清楚睡觉后如何解决它。 :P
我刚刚将默认的jQuery代码更改为:
var isReceiptRequired = $('input[id$=_chkReceiptRequired]').is(':checked');
$('input[id$=_txtIDNumber]').prop('disabled', !isReceiptRequired);
ValidatorEnable($("[id$='rfvIDNumber']")[0], isReceiptRequired);
我只记得页面循环中的最后一件事是在页面上渲染它,因此jQuery可以通过代码隐藏控件中设置的值进行操作。