Инкремент, jQuery викторина
Я занимался разработкой викторины jQuery и смог добавить значение каждого ответа вместе, я хотел бы добавить функцию в викторину, которая позволила бы добавлять конкретные значения в набор переменных после ответа на каждый вопрос.
Я включил jsFiddle, вы можете видеть, когда каждый вопрос нажимается на его третий вопрос перед тем, как регистрируется какое-либо значение, и если добавляется четвертый вопрос, добавленное значение добавляется три раза.
JSFiddle: http://jsfiddle.net/jamcrowe/ta7LZ/1/
// Answers to each question add these values to finalResult
var value = {
'question0' : { one: 1, two: 2, three: 3, four: 4 },
'question1' : { one: 1, two: 2, three: 3, four: 4 },
'question2' : { one: 1, two: 2, three: 3, four: 4 }
};
// The next question to present after each response
var END = null;
var nextQuestion = {
'question0' : { one: 'question1', two: 'question1', three: 'question1', four: 'question1', },
'question1' : { one: 'question2', two: 'question2', three: 'question2', four: 'question2', },
'question2' : { one: END, two: END, three: END, four: END, },
};
// Show just the first question
$('.ques').hide();
$('#question0').fadeIn();
var outcome = 0;
$('.option').click(function(){
increment();
var answer = $(this).attr('value');
var question = $(this).attr('name');
outcome += value[question][answer];
$('#' + question).delay(500).fadeOut(function(){
var questionNext = nextQuestion[question][answer];
if (questionNext == END){
var finalResult = 'result ' + outcome;
alert("Values added together : " + finalResult);
}
else {
$('#' + questionNext).delay(2000).fadeIn(1000);
}
});
});
var online = 0;
var creative = 0;
var technical = 0;
var analyst = 0;
var managerial = 0;
function increment() {
$('#q1a').click(function(){
creative +=5;
online ++;
managerial ++;
});
$('#q2a').click(function(){
creative +=5;
online ++;
managerial ++;
});
$('#q3a').click(function(){
creative +=5;
online ++;
managerial ++;
});
$('#q4a').click(function(){
creative +=5;
online ++;
managerial ++;
});
alert(creative);
}
1 ответ
Ответ на то, что вы видите, состоит из двух частей:
Во-первых, каждый раз, когда вы запускаете increment
функция, вы привязываете новое событие клика к div
с id
q1a
, q2a
, q3a
а также q4a
, Это означает, что если у вас есть несколько click
события привязаны к одному div, один клик будет запускать событие несколько раз.
Далее эти события клика на q1a
, q2a
и т. д. запустить ПОСЛЕ $('.option')
событие клика. Поэтому, когда вы видите второе предупреждение в 0 точках, переменная creative
добавлено ПОСЛЕ того, как сработало это оповещение. Вы можете увидеть это, добавив console.log()
заявление внутри вашего q2a
событие клика как это:
$('#q2a').click(function(){
creative +=5;
online ++;
managerial ++;
console.log("q2a",creative);
});
В целом, вы должны либо настроить события нажатия внутри вашего increment
Функция в начале скрипта ИЛИ определяет, какой div был нажат и добавляет значения в соответствии с этим - НЕ добавляйте так много событий нажатия.
Надеюсь, это полезно - я могу ответить на дополнительные вопросы, если у вас есть какие-либо!