2015-07-07 4 views
1

В настоящее время я работаю над викториной в формате множественного выбора. Однако, когда я нажимаю на кнопку, она просто не работает!Quiz App: кнопки в javascript не работают

Вот полный код моей мини-викторина https://github.com/selvabalasingam/TypeQuiz/blob/master/js/app.js

Но я уверен, что проблема лежит между линиями 89-103 (Я вставил часть этого кода ниже)

$('button.choice').click(function(e) { 
    var choice = $(e.target).text(); 
    var question = quiz.getCurrentQuestion(); 
    // check if the answer is right and update question number and score 
    if (Question.answer == choice) { 
     getTotalCorrect = $('.questionCount').text(getTotalCorrect+1); 
     getScore = $('.scorePercentage').text(getScore); 
    } 
    else { 
     getTotalCorrect = $('.questionCount').text(getTotalCorrect+0); 
     getScore = $('.scorePercentage').text(getScore); 
    } 
    // then go to the next question 
    getNextQuestion(); 
}); 

Может ли кто-нибудь сказать, в чем проблема? Есть ли способ исправить это?

+0

Есть ли в консоли какие-либо ошибки? – DeadChex

+0

Одна из причин, почему кнопка в javascript не работает, вероятно, из-за семантической ошибки. У вас возникли ошибки в журнале консоли? – Daniel

+0

Я обновил свой код, но теперь, после того как я отвечу на свой первый вопрос, мой следующий вопрос не появляется. Я попытался заглянуть в консоль, но я не вижу никаких ошибок. http://selvabalasingam.github.io/TypeQuiz/# – Selva

ответ

0

Если вы посмотрите на консоль, вы увидите, что getTotalCorrect - undefined. Это потому, что getTotalCorrect is am Этот элемент привязан к области объекта quiz, но вы пытаетесь получить к нему доступ по всему миру.

Вы можете изменить это:

if (Question.answer == choice) { 
    getTotalCorrect = $('.questionCount').text(getTotalCorrect+1); 
    getScore = $('.scorePercentage').text(getScore); 
} 
else { 
    getTotalCorrect = $('.questionCount').text(getTotalCorrect+0); 
    getScore = $('.scorePercentage').text(getScore); 
} 
getNextQuestion(); 

к:

question.answer = choice; // pass the user's choice to the question object 
$('.questionCount').text(quiz.getTotalCorrect()); 
$('.scorePercentage').text(quiz.getScore()); 
quiz.getNextQuestion(); // load the next question 
renderText(quiz.getCurrentQuestion()); // render the new font 

Похоже renderText бы неопределенно называть себя:

var renderText = function(question) { 
    $('.text').css('font-family', question.correctChoice); 
    renderText(quiz.getCurrentQuestion()); // infinite recursion call 
}; 

Вместо этого вызовите renderText при загрузке страницы, например:

var renderText = function(question) { 
    $('.text').css('font-family', question.correctChoice); 
}; 

renderText(quiz.getCurrentQuestion()); 
+0

Большое спасибо Stiliyan !!! Я сделал эту поправку на свой код, и теперь я вижу, что оценка появляется, но она не переходит к следующему вопросу, поэтому мне придется это выяснить. Жаль, что я не смог бы вас перечислить, но я новичок! – Selva

+0

Добро пожаловать, Селва, и удачи - это очень близко! Похоже, вам нужно будет исправить бесконечную рекурсию в 'renderText', а затем вызвать ее при инициализации викторины и выбрать ответ. Я обновил свой ответ с некоторыми подробностями.Вы также можете сгруппировать все функции отображения в новый метод 'Quiz.prototype', называемый' displayCurrentQuestion' – Stiliyan

+0

Также вы можете принимать ответы на Stack Oveflow следующим образом: http://meta.stackexchange.com/questions/5234/how- делает-акцепторные-ан-ответ-работы – Stiliyan

1

Изменить

getTotalCorrect = $('.questionCount').text(getTotalCorrect+1);

в

getTotalCorrect = $('.questionCount').text(quiz.getTotalCorrect+1);

0

Вы никогда не установите значение Question.answer. Это значение иногда является функцией, а иногда и объектом. Вы, вероятно, следует переименовать Question.answer (как функции Question.setAnswer.

from this gist

Question.prototype = { 
    setAnswer: function(choice) { 
     this.answer = choice; 
    }, 
} 

Это, как говорится, Question.answer/Question.setAnswer никогда не вызывается, вместо этого вы хотите, чтобы смотреть прямо на Question.correctChoice.

if (Question.correctChoice == choice) { 
     getTotalCorrect = $('.questionCount').text(getTotalCorrect+1); 
     getScore = $('.scorePercentage').text(getScore); 
    } 
    else { 
     getTotalCorrect = $('.questionCount').text(getTotalCorrect+0); 
     getScore = $('.scorePercentage').text(getScore); 
    }