次のような HTML の論理構造を仮定します。
<form action="#" method="post">
<fieldset>
<legend>Question 1: gender</legend>
<label for="m">Male</label>
<input type="radio" name="gender" id="m" />
<label for="f">Female</label>
<input type="radio" name="gender" id="f" />
</fieldset>
<fieldset>
<legend>Question title</legend>
<!-- answer options -->
</fieldset>
<!-- other questions... -->
</form>
次に、私が考えることができる最も簡単なオプションは次のとおりです。
$('form').on('click','input',
function(){
var fieldset = $(this).closest('fieldset');
fieldset.fadeOut(500,
function(){
fieldset.next('fieldset').fadeIn(500);
});
});
<a href="http://jsfiddle.net/davidThomas/sQW79/1/" rel="nofollow">JS Fiddle のデモ。
以前の質問を再検討できるようにするために、次の行に沿って適応することをお勧めします。
<form action="#" method="post">
<fieldset>
<legend>Question 1: gender</legend>
<label for="m">Male</label>
<input type="radio" name="gender" id="m" />
<label for="f">Female</label>
<input type="radio" name="gender" id="f" />
<div class="controls">
<a href="#" class="prev">Previous</a>
<a href="#" class="next">Next</a>
</div>
</fieldset>
<!-- other questions... -->
</form>
そしてjQueryと組み合わせる:
$('fieldset').not($('fieldset:eq(0)')).hide();
$('.controls a.prev:first, .controls a.next:last').addClass('disabled');
$('form').on('click', 'input, a', function(e) {
var target = e.target,
targetType = target.tagName.toLowerCase(),
targetClass = target.className,
fieldset = $(this).closest('fieldset'),
prev = fieldset.prev().length,
next = fieldset.next().length;
if (targetType == 'input' && next > 0) {
fieldset.fadeOut(500, function() {
fieldset.next('fieldset').fadeIn(500);
});
}
else if (targetType == 'a') {
if (targetClass == 'prev' && prev > 0) {
fieldset.fadeOut(500, function() {
fieldset.prev('fieldset').fadeIn(500);
});
}
else if (targetClass == 'next' && next > 0) {
fieldset.fadeOut(500, function() {
fieldset.next('fieldset').fadeIn(500);
});
}
}
});
JS フィドルのデモ。
参考文献:
jQueryのもの:
ネイティブ JavaScript のもの: