从c#代码隐藏中触发jQuery函数/事件

时间:2015-02-20 19:39:21

标签: javascript c# jquery asp.net

我希望我能够清楚地解释我的问题。

场景:

带有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?

*我已经尝试过此linkthis,但它似乎无法正常工作。

拜托,请帮助我。我在这里发布的片段只是我迫切需要解决的许多jQuery验证之一。提前谢谢。

1 个答案:

答案 0 :(得分:0)

现在感到非常愚蠢。弄清楚睡觉后如何解决它。 :P

我刚刚将默认的jQuery代码更改为:

var isReceiptRequired = $('input[id$=_chkReceiptRequired]').is(':checked');

$('input[id$=_txtIDNumber]').prop('disabled', !isReceiptRequired);
ValidatorEnable($("[id$='rfvIDNumber']")[0], isReceiptRequired);

我只记得页面循环中的最后一件事是在页面上渲染它,因此jQuery可以通过代码隐藏控件中设置的值进行操作。