2016-04-04 3 views
0

Так что я достаточно новичок в javascript и jquery. Я смотрел учебные пособия, которые были хорошей отправной точкой, однако у всех, кажется, есть один правильный вопрос, поэтому они могут проверять внутри функции, если пользователь отвечает правильно, например, если равен утверждению.Приложение jQuery quiz, как реализовать систему ответа на основе точек?

if (answers[i] == userAnswers[i]) { 
     flag = true; 
    } 

То, что я хотел бы сделать, однако, имеет другое значение, прикрепленное к каждому из возможных ответов, например

var 1 = 50 
var 2 = 0 
var 3 = 10 

Вопрос 1

var a = 1 
var b = 2 
var c = 3 
var d = 3 

Вопрос 2

var a = 3 
var b = 1 
var c = 2 
var d = 3 

Что ж ould - лучший способ сделать что-то подобное?

+0

Как можно ответить «хорошо»? – John

+0

Как бы вы это реализовали? У каждого вопроса всегда был бы «а» как «хороший» ответ? – Hawkeye

+0

Я просто использовал эти имена в качестве примера, я обновил их до номеров. –

ответ

1

Во-первых, предположение:

  • answers[i] содержит номер, который является то, что пользователь выбрал в качестве ответа на вопрос i (Примечание: если answers[i] на самом деле является символом, вы можете получить целочисленное значение, вычитая answers[i] значением ascii 'a').

Чтобы сделать то, что вы хотите сделать, просто определить 2-мерный массив score[i][j], где i является индексом вопроса, и j это номер опции (т.е. asnwer на вопрос i), то score[i][j] дает оценка по этому вопросу. Так скажем, на вопрос 1, варианты, как вы описали выше (то есть = хорошо, Ь = неправильно, ...), то вы бы

//set the values for the answers 
score[1][1] = good; score[1][2] = wrong; score[1][3] = wrong; score[1][4] = okay 
score[2][1] = okay; score[2][2] = good; score[2][3] = wrong; 
//more score setting 

//get the value of the answer 
var score_q1 = score[1][answers[1]] 
var score_q2 = score[2][answers[2]] 

т.е., поскольку answers[i] содержит значение ответа как число, позвонив по номеру score[question_nb][answers[question_nb]], вы получите оценку по этому вопросу. В этом случае нет операторов if. Если вы хотите получить общий балл, просто переверните все вопросы и подведите итоги для этого вопроса.

+0

Это имеет большое значение благодаря вашей помощи. –

+0

Просто тестирование решения теперь и получение '' Uncaught TypeError: Невозможно установить свойство «1» неопределенного «' на двумерном массиве. Прежде чем '// установить значения ответов ', я должен будет инициализировать массив, или я должен создать его как' var score = [[0,1], [0,2]] 'и т. Д.? –

+0

Вы попробовали сначала объявить массив? – Hawkeye

0

Лучший способ - это пара ключей/значений. Я бы попробовал что-то вроде json. Вы бы иметь свой JSON с ключом хороших и значением (для точек) в 50. JSON будет выглядеть примерно, как показано ниже:

var kvPair = {"good":"50", "wrong":"0", "okay":"10"}; 

тогда, когда кто-то нажимает ответ он будет работать Аякс, чтобы определить счет:

$.ajax({ 
    type: "POST", 
    dataType: "json", 
    url: "someUrl", 
    data: kvPair, 
    success: function (data) { 
     //do something with score data 
    }, 
    error: function (event) { 
     ShowErrorLabel("ERROR in ajax call('someUrl'): \n" + "Error : " + event.status + " - " + event.statusText); 
    } 
}); 
Смежные вопросы