質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

2回答

4838閲覧

jquery、診断コンテンツ作成

his2

総合スコア6

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

1クリップ

投稿2018/04/28 02:52

編集2018/04/28 03:07

jqueryで診断コンテンツを作りたいのですが
具体的には1つの画面で、2つの選択肢の質問に30問位答える形です。
裏の設定として8項目(a,b,c,d,e,f,g,h)あり、回答を選択すると、いずれか一つの項目にポイントが加算され
最終的にどの項目が高いかで、結果が出るものを作成したいのです。

ネットでしらべたところ

html

<legend>Q1</legend> <label><input type="radio" name="c1" value="1" /> A1</label> <label><input type="radio" name="c1" value="2" /> A2</label> <label><input type="radio" name="c1" value="3" /> A3</label> <legend>Q2</legend> <label><input type="radio" name="c2" value="1" />A4</label> <label><input type="radio" name="c2" value="2" />A5</label> <label><input type="radio" name="c2" value="3" />A6</label> <legend>Q3</legend> <label><input type="radio" name="c3" value="1" />A7</label> <label><input type="radio" name="c3" value="2" />A8</label> <label><input type="radio" name="c3" value="3" />A9</label> <button id="check">Check</button> <div id="result"></div>

js

$(function(){ $radio = $(':radio'); $('#check').click(check);//診断ボタン押させる function check(){ var total = 0; var result = ''; $radio.filter(':checked').map(function(){ total += Number(this.value); }); alert(total); if (total > 6) { result = '結果1'; } else if( total > 3 ) { result = '結果2'; } else if( total > 0) { result = '結果2'; } else { result = '何も選択されていません'; } $('#result').html(result); } });

までは発見したのですが、これでは変数が1つしか使えず、変数を8個使う方法が分かりません。

どなたかご回答よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Lhankor_Mhy

2018/04/28 03:05

『裏の設定』はどのようなデータになっていますか? その部分のコードをご提示ください。
his2

2018/04/28 03:12

すみませんが、全くコードを書いていません。8項目(8個の変数)の中で一番得点が高いものと2番目に得点が高いものが何だったかによって診断結果を出すもので、単純に比較しようかなと思っていましたがjqueryは初めてなのでまだ調べていません。申し訳ありません。
Lhankor_Mhy

2018/04/28 03:19

なるほど。Q1がa、Q2がc、などの『裏の設定』をデータ化する必要があるかと思いますが、実際には書いていなくても予定で結構ですので、どのように書くのかご提示ください。
his2

2018/04/28 04:02

申し訳ありませんが、調べてからお答えしようと思います。
guest

回答2

0

こちらのサイト様のようなものを作りたいんですよね?
http://www.siyasui.ne.jp/android/uranai/ketueki/nanigatakei.htm

試しに血液型で10問作成してみました。
各血液型へのポイント配分については、適当にやりました。

ひとまず、ポイントが一番高いものだけ結果表示します。
本来は、2番目に高いものと比べるとのことで、
アルゴリズム思いつき次第、コード編集いたします。

html

1<div id="questionWrap"></div> 2<button id="check">Check</button> 3<div id="result"></div> 4

js

1const $questionWrap = $('#questionWrap') 2const $result = $('#result') 3 4//declare CONST_VAL 5const BLOOD_TYPE = { 6 A: 'A', 7 B: 'B', 8 O: 'O', 9 AB: 'AB', 10} 11const ANSWER = { 12 YES: 'yes', 13 NO: 'no', 14} 15const BLOOD_TYPE_IDX = { 16 YES: 1, 17 NO: 2, 18} 19const QUESTION_TEXT_IDX = 0; 20 21 22const questionList = [//[text, if yes, if no] 23 ['自分は良く気配が出来る人だと思う。', BLOOD_TYPE.A, BLOOD_TYPE.B], 24 ['自分は、神経がこまやかだと思う。', BLOOD_TYPE.A, BLOOD_TYPE.O], 25 ['人の気持ちを敏感に感じとる。', BLOOD_TYPE.AB, BLOOD_TYPE.O], 26 ['自分は思いやりがある方だと思う。', BLOOD_TYPE.O, BLOOD_TYPE.B], 27 ['自分は、サービス精神旺盛だと思う。', BLOOD_TYPE.A, BLOOD_TYPE.B], 28 ['自分は、争い事を避けるために自分を抑えることが多いと思う。', BLOOD_TYPE.AB, BLOOD_TYPE.B], 29 ['自分は、慎重堅実で完全に納得しないと行動しないと思う。 ', BLOOD_TYPE.A, BLOOD_TYPE.B], 30 ['自分は、どちらかと言うとハメをはずさない優等生タイプだと思う。', BLOOD_TYPE.A, BLOOD_TYPE.B], 31 ['自分は、潔癖である。', BLOOD_TYPE.A, BLOOD_TYPE.O], 32 ['自分は、きれい好きである。', BLOOD_TYPE.A, BLOOD_TYPE.O], 33] 34 35const getQuestionDom = ({questionId, questionNum, questionText}) => { 36 let str = ''; 37 str += '<div class="question">'; 38 str += '<legend>'; 39 str += `<span>Q${questionNum}:</span>`; 40 str += `<span>${questionText}</span>`; 41 str += '</legend>'; 42 str += '<label>'; 43 str += `<input class="answer-radio" type="radio" name="q${questionNum}" value=${ANSWER.YES} data-question-id=${questionId}/>`; 44 str += `<span>${ANSWER.YES}</span>`; 45 str += '</label>'; 46 str += '<label>'; 47 str += `<input class="answer-radio" type="radio" name="q${questionNum}" value=${ANSWER.NO} data-question-id=${questionId}/>`; 48 str += `<span>${ANSWER.NO}</span>`; 49 str += '</label>'; 50 str += '</div>'; 51 return str; 52} 53 54const appendQuestionDom = () => { 55 const appendDomStr = questionList.reduce((domStr, question, idx) => { 56 return domStr += getQuestionDom({ 57 questionId: idx, 58 questionNum: idx + 1, 59 questionText: question[QUESTION_TEXT_IDX] 60 }) 61 }, ''); 62 $questionWrap.append(appendDomStr) 63} 64appendQuestionDom(); 65const $answerRadio = $('.answer-radio'); 66const initPoint = 0 67//init bloodTypeMap 68const bloodTypeMap = new Map() 69Object.values(BLOOD_TYPE).forEach((bloodType) => { 70 bloodTypeMap.set(bloodType, { bloodType, point: initPoint }) 71}) 72//init questionMap 73const questionMap = new Map() 74questionList.forEach((question, idx) => { 75 questionMap.set(idx, { 76 text: questionList, 77 [ANSWER.YES]: { 78 addDestination: question[BLOOD_TYPE_IDX.YES], 79 }, 80 [ANSWER.NO]: { 81 addDestination: question[BLOOD_TYPE_IDX.NO], 82 }, 83 }) 84}) 85 86const check = () => { 87 var total = 0; 88 var result = ''; 89 const addPoint = 1; 90 91 $answerRadio.filter(':checked').map((idx, element) => { 92 const questionID = element.dataset.questionId; 93 const question = questionMap.get(parseInt(questionID)) 94 const answer = element.value; 95 const addDestination = question[answer].addDestination; 96 const bloodType = bloodTypeMap.get(addDestination); 97 bloodType.point += addPoint; 98 }); 99 100 const sortedBloodTypePointsList = Array.from(bloodTypeMap.values()).sort((a, b) => { 101 return b.point - a.point; 102 }) 103 104 $result.text(`一番ポイントが高かった血液型は、${sortedBloodTypePointsList[0].bloodType}型です。`) 105} 106 107$('#check').click(check);

投稿2018/04/29 19:36

編集2018/04/29 19:40
fjaiofjawiefjaw

総合スコア210

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

his2

2018/04/30 01:29

ご回答ありがとうございます、具体的なコード大変参考になります。
guest

0

アルゴリズム的にはこんな感じかなと思います!

A. 選択した物を、裏の設定に当てはめる処理
(e,g,c,dについては例です)

Q1
選択肢1→ 選択すると eを+1する
選択肢2→ 選択すると gを+1する

Q2
選択肢1→ 選択すると cを+1する
選択肢2→ 選択すると dを+1する

..Q3,Q4に続く..

B. 裏の設定を比較し、どれが一番高いかを比較する処理
チェックボタンを押した際に、aからhまでのどれが一番大きいかを判定する

C. Bの判定に応じて、結果を出力する

投稿2018/04/28 04:13

kobayashitomoya

総合スコア40

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

his2

2018/04/30 01:29

ご回答ありがとうございます、参考にいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問