A jQuery plugin for creating pretty, dynamic quizzes.
See index.html
for demo and suggested HTML structure (the element class names are the important part).
See js/slickQuiz-config.js
to set up your quiz copy and questions.
To initialize your quiz:
$(function () {
$('#slickQuiz').slickQuiz({
// options
});
});
json
(JSON Object) - your quiz JSON, pass this instead of setting quizJSON outside of the plugin (see js/slickQuiz-config.js)
checkAnswerText
(String) Default: 'Check My Answer!'; - the text to use on the check answer button
nextQuestionText
(String) Default: 'Next »'; - the text to use on the next question button
backButtonText
(String) Default: ''; - the text to use on the back button; if left null / blank (default) - no back button will be displayed
tryAgainText
(String) Default: ''; - the text to use on the try again button; if left null / blank - no try again button will be displayed
preventUnansweredText
(String) Defaut: 'You must select at least one answer.'; - the text to display if a user submits a blank answer while preventUnanswered
is enabled
questionCountText
(String) Defaut: 'Question %current of %total'; - if displayQuestionCount
is enabled, this will format that text using the string provided. %current
and %total
are placeholders that will output the appropriate values. Note: displayQuestionCount
may eventually be deprecated in favor of this option
questionTemplateText
(String) Defaut: '%count. %text'; - if displayQuestionNumber
is enabled, this will format that question number and question using the string provided. %count
and %text
are placeholders that will output the appropriate values. Note: displayQuestionNumber
may eventually be deprecated in favor of this option
scoreTemplateText
(String) Defaut: '%score / %total'; - the format of the final score text. %score
and %total
are placeholders that will output the appropriate values
nameTemplateText
(String) Defaut: '<span>Quiz: </span>%name'; - the format of the quiz name; %name
is a placeholder that will output the quiz name. Note: the "Quiz" span in the default value is used to enhance accessibility, it will not display on the screen.
skipStartButton
(Boolean) Default: false; - whether or not to skip the quiz "start" button
numberOfQuestions
(Integer) Default: null; - the number of questions to load from the question set in the JSON object, defaults to null (all questions); Note: If you set this to an integer, you'll probably also want to set randomSortQuestions
to true to ensure that you get a mixed set of questions each page load.
randomSortQuestions
(Boolean) Default: false; - whether or not to randomly sort questions ONLY
randomSortAnswers
(Boolean) Default: false; - whether or not to randomly sort answers ONLY
preventUnanswered
(Boolean) Default: false; - prevents submitting a question with zero answers
perQuestionResponseMessaging
(Boolean) Default: true; - Displays correct / incorrect response messages after each question is submitted.
completionResponseMessaging
(Boolean) Default: false; - Displays all questions and selected answers with correct or incorrect response messages when the quiz is completed.
displayQuestionCount
(Boolean) Default: true; - whether or not to display the number of questions and which question the user is on, for example "Question 3 of 10". Note: this may eventually be deprecated in favor of questionCountText
displayQuestionNumber
(Boolean) Default: true; - whether or not to display the number of the question along side the question itself, for example, the "1." in "1. What is the first letter of the alphabet?" Note: this may eventually be deprecated in favor of questionTemplateText
events.onStartQuiz
(function) Default: empty; - a function to be executed once the quiz has started.
events.onCompleteQuiz
(function) Default: empty; - a function to be executed the quiz has completed; the function will be passed two arguments in an object: options.questionCount
, options.score
animationCallbacks.setupQuiz
(function) Default: empty; - a function to be executed once all jQuery animations have completed in the setupQuiz
method
animationCallbacks.startQuiz
(function) Default: empty; - a function to be executed once all jQuery animations have completed in the startQuiz
method; note that events.onStartQuiz()
would execute before this callback method due to durations of jQuery animations
animationCallbacks.resetQuiz
(function) Default: empty; - a function to be executed once all jQuery animations have completed in the resetQuiz
method
animationCallbacks.checkAnswer
(function) Default: empty; - a function to be executed once all jQuery animations have completed in the checkAnswer
method
animationCallbacks.nextQuestion
(function) Default: empty; - a function to be executed once all jQuery animations have completed in the nextQuestion
method
animationCallbacks.backToQuestion
(function) Default: empty; - a function to be executed once all jQuery animations have completed in the backToQuestion
method
animationCallbacks.completeQuiz
(function) Default: empty; - a function to be executed once all jQuery animations have completed in the completeQuiz
method; note that events.onCompleteQuiz()
would execute before this callback method due to durations of jQuery animations
disableNext
- Prevents submitting a question with zero answers. You should now use preventUnanswered
instead.
disableResponseMessaging
- Hides all correct / incorrect response messages. You should now use perQuestionResponseMessaging
and completionResponseMessaging
instead.
randomSort
- Randomly sort all questions AND their answers. You should now use randomSortQuestions
and randomSortAnswers
instead.
Want to manage your quizzes in a content management system?
Simply translate your CMS quiz data into a JSON object formatted like quizJSON
in js/slickQuiz-config.js
.
Then assign it as the quizJSON
variable instead of loading js/slickQuiz-config.js
.
Alternatively, you can pass the JSON right into the plugin using the json
option (useful if you are placing multiple quizzes on a page):
$(function () {
$('#slickQuiz').slickQuiz({json: {YOUR_JSON_HERE}});
});
The slickQuiz ID and class names are what are important here:
<body id="slickQuiz">
<h1 class="quizName"></h1>
<div class="quizArea">
<div class="quizHeader">
<a class="startQuiz" href="">Get Started!</a>
</div>
</div>
<div class="quizResults">
<h3 class="quizScore">You Scored: <span></span></h3>
<h3 class="quizLevel"><strong>Ranking:</strong> <span></span></h3>
<div class="quizResultsCopy"></div>
</div>
</body>
See js/slickQuiz-config.js
var quizJSON = {
"info": {
"name": "The Quiz Header",
"main": "The Quiz Description Text",
"results": "The Quiz Results Copy",
"level1": "The highest ranking",
"level2": "The almost highest ranking",
"level3": "The middle ranking",
"level4": "The almost lowest ranking",
"level5": "The lowest ranking"
},
"questions": [
{
"q": "The Question?",
"a": [
{"option": "an incorrect answer", "correct": false},
{"option": "a correct answer", "correct": true},
{"option": "another correct answer", "correct": true}
],
"select_any": false, // optional, see below
"force_checkbox": false, // optional, see below
"correct": "The Correct Response Message",
"incorrect": "The Incorrect Response Message"
}
]
}
Note: select_any
is used if there is more than one true answer and when submitting any single true answer is considered correct. (Select ANY that apply vs. Select ALL that apply)
Note: force_checkbox
Set this true if you want to render checkboxes instead of radios even if only one answer is true.
Created by Julie Cameron while previously employed at Quicken Loans, Detroit, MI