0

我有以下表单项:

Medications:    
<asp:RadioButtonList ID="meds" runat="server" RepeatDirection="Horizontal">
     <asp:ListItem Value="1">Yes (list below)</asp:ListItem>
     <asp:ListItem Value="0">No</asp:ListItem>
</asp:RadioButtonList>

Medication List:
<asp:CustomValidator ID="val_medsList" runat="server" ClientValidationFunction="check_medsList" 
   OnServerValidate="val_medsList_ServerValidate" ValidationGroup="GroupSave" ValidateEmptyText="true"
   ErrorMessage="required" ControlToValidate="medsList" EnableClientScript="true">
</asp:CustomValidator><br />
<asp:TextBox ID="medsList" CssClass="jQueryMedsListTarget" TextMode="MultiLine" runat="server" 
    Width="500" MaxLength="500" Wrap="true" Rows="3" />

这个想法是,如果选择“是”,则需要填写文本框,如果选择“否”,则相反。为了让“是”/“否”选项触发自定义验证器,我使用 'ValidatorHookupControl' 如下:

ValidatorHookupControl(document.getElementById('meds_0'), document.getElementById('val_medsList'));
ValidatorHookupControl(document.getElementById('meds_1'), document.getElementById('val_medsList'));

这对我有用,但是当我有两个以上的选择时,这会变得很烦人。我创建了以下内容来遍历所有选项,但它似乎不起作用(“是”和“否”不会触发自定义验证器):

$(document).ready(function () {
    hookupRadioButtonListToVal($('input[id^=meds_]'), $('#val_medsList'));
}); 
function hookupRadioButtonListToVal(rbl, validator) {
    $(rbl).each(function () {
        ValidatorHookupControl($(this), $(validator));
    });
}   

我假设我没有返回正确类型的元素,$(this)$(validator)不确定从那里去哪里。

4

1 回答 1

1

最终的解决方案是

function hookupRadioButtonListToVal(rbl, validator) {
    $(rbl).each(function () {
        ValidatorHookupControl(this, $(validator)[0]);
    });
}

这使用了 jbabey 共享的想法,并对验证器部分进行了调整。不幸的是,如果我只是打电话ValidatorHookupControl(this, validator);,我会得到TypeError: val.style is undefined

于 2013-04-09T12:49:13.897 回答