2016-08-21 4 views
1

本質的に、いくつかのラジオボタンオプションで1つの質問を表示します。 1つのボタンがクリックされると、新しい質問がラジオボタンの新しいセットで最初に表示されます(選択された回答に固有)。
このセットからの回答をクリックすると、下に別の質問が表示されます(ここで選択した回答に固有)。
ユーザーが以前のラジオボタンのいずれかを選択することにした場合、そのボタンの後にあるすべてのボタン(答えに無関係)を隠すことを希望します。ラジオボタンを使用してネストされたdivを表示/非表示

いつでも選択したオプションは、別のオプションが選択されていてもページに残ります(異なるオプションは単にリストに追加されます)。または、最新の質問のみが残りますあなたは、動的を使用する必要が

$(document).ready(function(){ 
 
    $("input[name$='group1']").click(function() { 
 
     var test = $(this).val(); 
 
     $(".desc").hide(); 
 
     $("#"+test).show(); 
 
    }); 
 
});
.desc { display: none; }
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
 

 
<html xmlns="http://www.w3.org/1999/xhtml"> 
 
<head> 
 
    <title>Basic jQuery Quiz Demo Page</title> 
 
    <link rel="Stylesheet" type="text/css" href="styles.css" /> 
 
    <script type="text/javascript" src="https://code.jquery.com/jquery-3.1.0.js"></script> 
 
    <script type="text/javascript" src="script.js"></script> 
 
</head> 
 
<body> 
 

 
<h1>Troubleshooting</h1> 
 
\t <h2>What needs to be fixed?</h2> 
 
<form> 
 
    <div><label><input type="radio" name="group1" value="in1">Internet</label></div> 
 
    <div><label><input type="radio" name="group1" value="tv1">TV</label></div> 
 
    <div><label><input type="radio" name="group1" value="ph1">Phone</label></div> 
 
</form> 
 

 
<div id="in1" class="desc"> 
 
<h3>Internet Troubleshooting</h3> 
 
\t <h3>Are there lights on the router?</h3> 
 
\t <form> 
 
    \t <div><label><input type="radio" name="group1" value="in2">Yes</label></div> 
 
    \t <div><label><input type="radio" name="group1" value="in3">No</label></div> 
 
\t </form> 
 
</div> 
 

 
<div id="in2" class="desc"> 
 
<h3>Is the power light red?</h3> 
 
\t <form> 
 
    \t <div><label><input type="radio" name="group1" value="in4">Yes</label></div> 
 
    \t <div><label><input type="radio" name="group1" value="in5">No</label></div> 
 
\t </form> 
 
</div> 
 
<div id="in3" class="desc"> 
 
<h3>Is the router plugged in?</h3> 
 
\t <form> 
 
    \t <div><label><input type="radio" name="group1" value="in6">Yes</label></div> 
 
    \t <div><label><input type="radio" name="group1" value="in7">No</label></div> 
 
\t </form> 
 
</div> 
 

 
<div id="in4" class="desc"> 
 
<h3>Failing Device</h3> 
 
\t <p>A red power light most likely indicates the device is not functioning properly. Contact your ISP.</p> 
 
</div> 
 
<div id="in6" class="desc"> 
 
<h3>Plug the router into another outlet. Is the power light on?</h3> 
 
\t <form> 
 
    \t <div><label><input type="radio" name="group1" value="in4">Yes</label></div> 
 
    \t <div><label><input type="radio" name="group1" value="in5">No</label></div> 
 
\t </form> 
 
</div> 
 
<div id="in7" class="desc"> 
 
<h3>Please plug in your router and try again once the router has fully started up. (Note: This process may take up to 5 minutes)</h3> 
 
</div> 
 

 
<div id="tv1" class="desc"> 
 
<h1>TV Troubleshooting</h1> 
 
\t <form> 
 
    \t <div><label><input type="radio" name="group1" value="tv2">opt1</label></div> 
 
    \t <div><label><input type="radio" name="group1" value="tv3">opt2</label></div> 
 
    \t <div><label><input type="radio" name="group1" value="tv4">opt3</label></div> 
 
\t </form> 
 
</div> 
 
<div id="ph1" class="desc"> 
 
<h1>Phone Troubleshooting</h1> 
 
\t <form> 
 
    \t <div><label><input type="radio" name="group1" value="ph2">opt1</label></div> 
 
    \t <div><label><input type="radio" name="group1" value="ph3">opt2</label></div> 
 
    \t <div><label><input type="radio" name="group1" value="ph4">opt3</label></div> 
 
\t </form> 
 
</div> 
 

 
</body> 
 
</html>

答えて

-1

:ページ、それは不可能前の質問で異なる選択すること...ここ

は、私が今持っているものである上HTML内の1つのdivにのみリンクするjavascript内の要素ここで私が行ったアンケート調査の例があります。

HTML::

  <div id = "surveyDiv"> 
       <ul class = "options"> 
        <ul><input type="radio" id="v1" name="q" value=1>1</ul> 
        <ul><input type="radio" id="v2" name="q" value=2>2</ul> 
        <ul><input type="radio" id="v3" name="q" value=3>3</ul> 
        <ul><input type="radio" id="v4" name="q" value=4>4</ul> 
        <ul><input type="radio" id="v5" name="q" value=5>5</ul> 
       </ul> 
       <button id="next" type="button">Next</button> 
      </div> 

Javascriptを:行うには

$('#surveyTime').on('click', function(){ 
    friend.name = $('#nameInput').val().trim(); 
    $('.personalInfo').hide(); 
    $('.survey').show(); 
}); 
//survey questions 
var questions = 
[{question: "You would know at least 2 songs at a Pearl Jam concert"}, 
{question: "You would dress up and dance all day Electric Zoo"}, 
{question: "You can tell the difference between Country Songs"}, 
{question: "You enjoy guitar solos"}, 
{question: "You have been or would go to Bonnaroo"}, 
{question: "You love Justin Bieber"}, 
{question: "You know who Public Enemy is"}, 
{question: "You appreciate Miles Davis"}, 
{question: "You like and dance/or would like to learn to dance salsa"}, 
{question: "You're one of those people that says you like all music"}]; 

//starting with question as 0 since array starts at 0 
var questionNumber = 0; 

//creates each question one at a time 
function createQuestion(index){ 
     var newDiv = $('<div>', { 
      id: 'current' 
     }); 
     var newP = $('<p>'); 
     newP.append(questions[index].question); 
     newDiv.append(newP); 
     return newDiv; 
}; 
//appends the next question and removes the previous question 
//also removes the display of the questions once done 
function displayNext(){ 
    $('#current').remove(); 
    if(questionNumber < questions.length){ 
     var nextQuestion = createQuestion(questionNumber); 
     $('#question').append(nextQuestion); 
    } else { 
     $('.survey').hide(); 
     $('#submitButton').show(); 
     var newDiv2 = $('<div>'); 
     var final = $('<h2>Thank You For Taking This Survey. Please Press Submit Button To Meet Your Match</h2>'); 
     newDiv2.append(final); 
     $('.thankYou').append(newDiv2); 
    } 
} 
+0

私はこの回答に同意しません。私の答えを数分で投稿する。タイトルは「シンプルなjQueryクイズ」なので、私はそれをJavaScriptで完全に書くことは望ましい解決策だとは思わない。 – NoobishPro

0

最善の方法あなたが知っていれば必ず、しかし、動的な要素ではない$(< ...>)との要素であり、これは、あなたの質問と回答を別々のJavascriptファイルで定義し、クイズフォームを動的に生成することです。

しかし、あなたはそれを行うにはしたくなかったと言う - ここであなたは自分のHTML(少し微調整)とJavascriptでそれを達成できた一つの方法だ:

$(document).ready(function(){ 
 
    $("input[name$='group1']").click(function() { 
 
     var test = $(this).val(); 
 
     if (test[2] == '1') { 
 
      // Check whether this is a top-level question, and if so, 
 
      // hide all the subquestions (and uncheck responses) 
 
      $('.desc').hide(); 
 
      $('input').not('[value='+test+']').removeAttr('checked'); 
 
     } else { 
 
      // Find the ID of this question 
 
      var parent_q = $($(this).parents('.desc')[0]).attr('id'); 
 
      var type = parent_q.substring(0,2); // Get the type, such as "in" 
 
      var level = parent_q.substring(2); // Get the level, such as 1 
 
      $(".desc").each(function(elt_index, elt) { 
 
       // Hide each question/answer with either a different type or a higher ID. 
 
       var e_id = $(elt).attr('id'); 
 
       if(e_id.substring(0,2) != type || e_id.substring(2) > level) { 
 
        $(elt).hide(); 
 
        $(elt).children('input').removeAttr('checked'); 
 
       } 
 
      }); 
 
     } 
 
     $("#"+test).show(); 
 
    }); 
 
});
.desc { display: none; }
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
 

 
<html xmlns="http://www.w3.org/1999/xhtml"> 
 
<head> 
 
    <title>Basic jQuery Quiz Demo Page</title> 
 
    <link rel="Stylesheet" type="text/css" href="styles.css" /> 
 
    <script type="text/javascript" src="https://code.jquery.com/jquery-3.1.0.js"></script> 
 
    <script type="text/javascript" src="script.js"></script> 
 
</head> 
 
<body> 
 

 
<h1>Troubleshooting</h1> 
 
\t <h2>What needs to be fixed?</h2> 
 
<form> 
 
    <div><label><input type="radio" name="group1" value="in1">Internet</label></div> 
 
    <div><label><input type="radio" name="group1" value="tv1">TV</label></div> 
 
    <div><label><input type="radio" name="group1" value="ph1">Phone</label></div> 
 
</form> 
 

 
<div id="in1" class="desc"> 
 
<h3>Internet Troubleshooting</h3> 
 
\t <h3>Are there lights on the router?</h3> 
 
\t <form> 
 
    \t <div><label><input type="radio" name="group1" value="in2">Yes</label></div> 
 
    \t <div><label><input type="radio" name="group1" value="in3">No</label></div> 
 
\t </form> 
 
</div> 
 

 
<div id="in2" class="desc"> 
 
<h3>Is the power light red?</h3> 
 
\t <form> 
 
    \t <div><label><input type="radio" name="group1" value="in8">Yes</label></div> 
 
    \t <div><label><input type="radio" name="group1" value="in5">No</label></div> 
 
\t </form> 
 
</div> 
 
<div id="in3" class="desc"> 
 
<h3>Is the router plugged in?</h3> 
 
\t <form> 
 
    \t <div><label><input type="radio" name="group1" value="in6">Yes</label></div> 
 
    \t <div><label><input type="radio" name="group1" value="in7">No</label></div> 
 
\t </form> 
 
</div> 
 

 

 
<div id="in6" class="desc"> 
 
<h3>Plug the router into another outlet. Is the power light on?</h3> 
 
\t <form> 
 
    \t <div><label><input type="radio" name="group1" value="in4">Yes</label></div> 
 
    \t <div><label><input type="radio" name="group1" value="in5">No</label></div> 
 
\t </form> 
 
</div> 
 
<div id="in7" class="desc"> 
 
<h3>Please plug in your router and try again once the router has fully started up. (Note: This process may take up to 5 minutes)</h3> 
 
</div> 
 
<div id="in8" class="desc"> 
 
<h3>Failing Device</h3> 
 
\t <p>A red power light most likely indicates the device is not functioning properly. Contact your ISP.</p> 
 
</div> 
 

 
<div id="tv1" class="desc"> 
 
<h1>TV Troubleshooting</h1> 
 
\t <form> 
 
    \t <div><label><input type="radio" name="group1" value="tv2">opt1</label></div> 
 
    \t <div><label><input type="radio" name="group1" value="tv3">opt2</label></div> 
 
    \t <div><label><input type="radio" name="group1" value="tv4">opt3</label></div> 
 
\t </form> 
 
</div> 
 
<div id="ph1" class="desc"> 
 
<h1>Phone Troubleshooting</h1> 
 
\t <form> 
 
    \t <div><label><input type="radio" name="group1" value="ph2">opt1</label></div> 
 
    \t <div><label><input type="radio" name="group1" value="ph3">opt2</label></div> 
 
    \t <div><label><input type="radio" name="group1" value="ph4">opt3</label></div> 
 
\t </form> 
 
</div> 
 

 
</body> 
 
</html>

+0

ページのタイトルは ' Basic jQuery Quiz Demo Page'です。私はこれが基本的なjQueryにとって非常に複雑であると感じています。それを簡略化できますか? – NoobishPro

0

これが何をすべきそれ: https://jsfiddle.net/csbnw5ne/2/

jsFiddleのコメントが明確になることを願っています。 私はそれを急がなければならなかったので、私は多くの時間を残していませんでした。それはかなり簡単な解決策です:

あなたが開いたボックスと閉じるものを覚えておく必要があります。何とかこれを見つけなければならないので、私はbox-numberで箱の番号をつけました。 次に、jQueryでオプションを含むボックス番号を確認します。私はちょうどクリックされたボックスの外にあるすべてのボックスを閉じますが、以前に開いたボックスがちょうどクリックされたボックスより前のボックスだった場合のみ 次に、すべてのボックスを隠すことなく、必要なボックスを開きます。

これで、正しく並べ替えてください。クイズの「最後」が最後のボックスであることを確認し、正しく番号を付けます。あなたは今のように一緒にグループ化しておくとうまくいくはずです。それは完璧ではありませんが、それは私が数分で考えることができるほど簡単ですし、htmlを並べ替えておくとうまくいくはずです。

これ以上問題がある場合はお知らせください。 jsfiddleが出て行くときのため

<h1>Troubleshooting</h1> 
    <h2>What needs to be fixed?</h2> 
<form> 
    <div><label><input type="radio" name="group1" value="in1">Internet</label></div> 
    <div><label><input type="radio" name="group1" value="tv1">TV</label></div> 
    <div><label><input type="radio" name="group1" value="ph1">Phone</label></div> 
</form> 

<div id="in1" class="desc" data-box="1"> 
<h3>Internet Troubleshooting</h3> 
    <h3>Are there lights on the router?</h3> 
    <form> 
     <div><label><input type="radio" name="group1" value="in2">Yes</label></div> 
     <div><label><input type="radio" name="group1" value="in3">No</label></div> 
    </form> 
</div> 

<div id="in2" class="desc" data-box="2"> 
<h3>Is the power light red?</h3> 
    <form> 
     <div><label><input type="radio" name="group1" value="in4">Yes</label></div> 
     <div><label><input type="radio" name="group1" value="in5">No</label></div> 
    </form> 
</div> 
<div id="in3" class="desc" data-box="3"> 
<h3>Is the router plugged in?</h3> 
    <form> 
     <div><label><input type="radio" name="group1" value="in6">Yes</label></div> 
     <div><label><input type="radio" name="group1" value="in7">No</label></div> 
    </form> 
</div> 

<div id="in6" class="desc" data-box="4"> 
<h3>Plug the router into another outlet. Is the power light on?</h3> 
    <form> 
     <div><label><input type="radio" name="group1" value="in4">Yes</label></div> 
     <div><label><input type="radio" name="group1" value="in5">No</label></div> 
    </form> 
</div> 

<div id="in4" class="desc" data-box="5"> 
<h3>Failing Device</h3> 
    <p>A red power light most likely indicates the device is not functioning properly. Contact your ISP.</p> 
</div> 

<div id="in7" class="desc" data-box="6"> 
<h3>Please plug in your router and try again once the router has fully started up. (Note: This process may take up to 5 minutes)</h3> 
</div> 

<div id="tv1" class="desc" data-box="7"> 
<h1>TV Troubleshooting</h1> 
    <form> 
     <div><label><input type="radio" name="group1" value="tv2">opt1</label></div> 
     <div><label><input type="radio" name="group1" value="tv3">opt2</label></div> 
     <div><label><input type="radio" name="group1" value="tv4">opt3</label></div> 
    </form> 
</div> 
<div id="ph1" class="desc" data-box="8"> 
<h1>Phone Troubleshooting</h1> 
    <form> 
     <div><label><input type="radio" name="group1" value="ph2">opt1</label></div> 
     <div><label><input type="radio" name="group1" value="ph3">opt2</label></div> 
     <div><label><input type="radio" name="group1" value="ph4">opt3</label></div> 
    </form> 
</div> 

新規のjavascript:

$(document).ready(function(){ 
    var lastBoxOpened = 0; 

    $("input[name$='group1']").click(function() { 
     var boxNumber = parseInt($(this).parents('.desc').attr("data-box")); 

     //check if the data-box was succesfully retrieved. If not, first option chosen, reset all of it 
     if(isNaN(boxNumber)){ 
     boxNumber = 0; 
     } 

     var test = $(this).val(); 
     var target = $("#"+test) 
     var newBoxOpened = target.attr("data-box"); 
     //check if the last opened box was an earlier one than the newly clicked one 
     if(lastBoxOpened > boxNumber){ 
     //hide boxes beyond the one we opened now 
     $('.desc').each(function(){ 
     //if box number is bigger than the currently clicked box, close them. 
      if($(this).attr("data-box") > boxNumber){ 
      $(this).hide(); 
      //uncheck the previously selected radio buttons in now hidden things 
      $('input', this).prop("checked", false); 
      } 
     }); 
     } 
     //render target box 
     target.show(); 
     //update last opened box to the newly opened one 
     lastBoxOpened = newBoxOpened; 
    }); 
}); 

追記:ように私は、in4ラッパー上記in6ラッパーのHTMLを入れjsFiddleが出て行くときのため 新しいHTMLこの結果(クイズの終わりまでは決して明らかにされません)は常に底にとどまります。それ以外の場合は、答えとしてではなくin6より上にポップアップ表示されます。

update:以前は選択されていたラジオボタンを実際にクリアする機能を追加しました。ちょうど私に控えめではないように思えました(結果を見るために選択したボックスをクリックしなければならない場合は奇妙です)。

+1

このHTMLは無効です。有効なには、 'data-'で始まるカスタム属性(使用されている場合)が必要です。 [W3C仕様](https://www.w3.org/TR/html5/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)とhttp://を参照してください。 1002。 –

+1

(そうでなければ、カスタム属性を使用するのは間違いなく、どのような新しい複雑性を導入するのかという選択肢です)。ここでHTMLを含めることはできますか?JSFiddleが外に出ると、失われた? –

+0

@ChristianTernusあなたは完全に正しいです。私はその時点で何を考えているのか分かりません(それは午前5時ですが、今は酔っぱらっています)。カスタム属性を修正し、jsfiddleを更新してhtmlを追加しました。ありがとうございました! – NoobishPro

関連する問題