我有一堆默认禁用的文本框的表单,然后通过使用每个旁边的复选框启用。使用取决于jQuery验证插件
启用后,这些文本框中的值必须是有效的数字,但禁用时,它们不需要值(显然)。我使用jQuery Validation插件来做这个验证,但它似乎没有做我期望的。
当我单击复选框并禁用文本框时,尽管我已将depends
子句添加到规则(请参阅下面的代码),但我仍然收到无效字段错误。奇怪的是,实际发生的是错误信息显示瞬间消失。
这里是复选框&文本框列表中的一个样本:
<ul id="ItemList">
<li>
<label for="OneSelected">One</label><input id="OneSelected" name="OneSelected" type="checkbox" value="true" />
<input name="OneSelected" type="hidden" value="false" />
<input disabled="disabled" id="OneValue" name="OneValue" type="text" />
</li>
<li>
<label for="TwoSelected">Two</label><input id="TwoSelected" name="TwoSelected" type="checkbox" value="true" />
<input name="TwoSelected" type="hidden" value="false" />
<input disabled="disabled" id="TwoValue" name="TwoValue" type="text" />
</li>
</ul>
,这里是jQuery代码我使用
//Wire up the click event on the checkbox
jQuery('#ItemList :checkbox').click(function(event) {
var textBox = jQuery(this).siblings(':text');
textBox.valid();
if (!jQuery(this).attr("checked")) {
textBox.attr('disabled', 'disabled');
textBox.val('');
} else {
textBox.removeAttr('disabled');
textBox[0].focus();
}
});
//Add the rules to each textbox
jQuery('#ItemList :text').each(function(e) {
jQuery(this).rules('add', {
required: {
depends: function(element) {
return jQuery(element).siblings(':checkbox').attr('checked');
}
},
number: {
depends: function(element) {
return jQuery(element).siblings(':checkbox').attr('checked');
}
}
});
});
忽略每个li
隐藏字段它的存在,因为我使用的是asp.net MVC的Html.Checkbox
方法。
我评论而不是回答,因为我从来没有使用验证插件。你有没有尝试将textBox.validate()放入检查复选框的if语句的真正部分内? – cLFlaVA 2008-12-19 01:14:58
不幸的是,没有做到这一点 – 2008-12-19 04:50:44