我使用的是一种很长的可扩展形式。例如,如果使用“是”回答question 1
,则会显示question 1.1
,依此类推。
这适用于以下(简单)jquery脚本:
Selectmenu
<script type="text/javascript">
$(document).ready(function() {
$(".question").change(function() {
var itemValue = $(this).children(':selected').val();
if(itemValue != "" && itemValue != "N")
{
$(".questiont").show();
}
else
{
$(".questiont").hide();
}
});
});
</script>
HTML
<select name="question1[]" class='required txtBox'>
<option selected="selected"></option>
<option value="J">Yes</option>
<option value="N">No</option>
</select>
<table>
<tr class="questiont" style="display:none; border-collapse:collapse;">
<td>4.2</td>
<td>Textarea</td>
<td><textarea name="questiont[]" class="txtBox"></textarea></td>
</tr>
</table>
问题是,如果1为“是”并且因此显示1.1,则应填写1.1。我正在使用jQuery验证。
问题是我不知道如何将验证与隐藏或显示的状态结合起来。
答案 0 :(得分:2)
试试这段代码:
if(itemValue != "" && itemValue != "N")
{
$(".questiont").show();
$('.questiont').toggleClass('required');
}
else
{
$(".questiont").hide();
$('.questiont').toggleClass('required');
}
答案 1 :(得分:1)
当两个相关元素嵌套在单独的容器元素中时,更容易选择和验证。然后,您可以使用closest()
方法选择父容器,并根据您的逻辑进行验证。
例如:
HTML
<div class="question_container">
<select name="question1[]" class='required txtBox'>
<option selected="selected"></option>
<option value="J">Yes</option>
<option value="N">No</option>
</select>
<table>
<tr class="questiont" style="display:none; border-collapse:collapse;">
<td>4.2</td>
<td>Textarea</td>
<td><textarea name="questiont[]" class="txtBox"></textarea></td>
</tr>
</table>
</div>
<强>的Javascript 强>
$('.question_container select.required').change(
function() {
var question_container = $(this).closest('.question_container');
var questiont = question_container.find('.questiont textarea');
if ($(this).val() == 'yes' && !$.trim(questiont.val())) {
// ... error logic goes here
// For example:
question_container.addClass('with_error');
}
}
);
答案 2 :(得分:1)
我建议使用jQuery validate plugin默认忽略隐藏字段。
任何满足jQuery选择器“:hidden”的输入元素都将被忽略,一旦显示该元素,它将根据您为其指定的规则进行验证。