のような、あなたの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);
});
});
JS Fiddle demo。前の質問を見直す可能にするために
、私は次の行に沿って適応をお勧めしたい:
<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 Fiddle demoを。
参考文献:
jQueryのもの:
ネイティブJavaScriptのもの:
、これはあなたが問題に気付いていない限り、私はあなたがクリックイベントを処理するため、より効率的な方法を心配する必要はないと思う、(ユーザーがクリックを実行すると)、ユーザーインターフェースの問題であるため、 。 – veeTrain
@ ak85のいずれかのアイデアをあなたに役立ててくれましたか?そうであれば回答を受け入れるか、ディスカッションに参加する必要があります。 – veeTrain
遅れて申し訳ありません@veeTrain私はそれがやっている方法が分かっていたことを知っていましたが、私は自分の開発のためにより良い技術を知りたいと思っていました。あなたの詳細な例をありがとう。 – ak85