これをもう少し洗練しました:
対応するオプションが選択されていない場合、入力および選択フィールドで「必須」属性を削除しようとしています。(例: オプション値は = to div id です)。現在、display:none に設定されているフィールドには必須フィールドがあるため、次のフィールドセットに進むことはできません。したがって、両方のオプションのすべてのフィールドが入力されていない場合、次のフィールドセットに進みません。表示されていないフィールドを無視するにはどうすればよいですか?
ここにフィドルがあります:http://jsfiddle.net/darcher/aUKhN/26/
HTML
<form action="#" id="form">
<fieldset>
<legend>Select an option</legend>
<div class="item">
<label><span>Option 1 or 2?</span>
<select name="oneOrTwo" id="two-op" required>
<option value="" disabled>— Select —
<option value="one">Option 1
<option value="two">Option 2
</select>
</label>
</div>
<div class="item">
<div id="one" class="addInfo" style="display:none">
<div class="item">
<label><span>Option 1</span>
<input type="text" name="op1" required>
</label>
</div>
</div>
<div id="two" class="addInfo" style="display:none">
<div class="item">
<label><span>Option 2</span>
<input type="text" name="op2" required>
</label>
</div>
</div>
</div>
<input type="button" name="prev" class="prev" value="Previous">
<input type="button" name="next" class="next" value="Next">
</fieldset>
<fieldset>
...
</fieldset>
</form>
jQuery
$(function () {
$('#two-op').change(function () {
$('.addInfo').hide();
$('#' + $(this).val()).show();
var formElements = new Array("one", "two");
for (i = 0; i < formElements.length; i++) {
if ($(this).val() != formElements[i]) {
$("#" + formElements[i]).children().find('input,select').each(function () {
$(this).val('');
$(this).removeAttr('required');
});
} else {
$(this).attr('required', 'required');
}
}
});
});
更新:このアプローチを採用しました
$(function () {
$('#employment_status').change(function () {
$('.addInfo').hide();
$('#' + $(this).val()).show();
var formElements = new Array("emp","semp","ret","unemp","student");
for(i=0; i < formElements.length; i++){
if($(this).val()=="emp" ||$(this).val()=="semp" ) fieldSetNumber = 9;
else fieldSetNumber = 3;
if($(this).val()!=formElements[i]){
$("#"+formElements[i]).children().find('input,select').each(function(){
$(this).parents("div").first().removeClass("good");
if($(this).is('input')) $(this).val('');
if($(this).is('select')) $(this).val('');
});
}
}
});
});