我找到了一个script,它使用jquery将json文件转换为测验。
我现在玩它的代码差不多一天了,我不能带来我想要的东西。
加载页面时会调用函数quiz().init();
和quiz().bindSubmit();
。
我想要的是必须先点击 START 按钮才能加载测验。
$("#start").click(function(){
currentQuestion = 0;
questionCount = 0;
answerArray = [];
infoMode = false;
gotData = false;
inMemoryData = [];
quiz().init();
quiz().bindSubmit();
});
HTML:
<button type="button" id="start">Start</button>
<div id="quiz-content"></div>
首次点击 START 按钮也可以在下次点击中成功重置测验,然后返回到#1。
但问题是在第一次点击开始按钮后,测验在提交测验时将无法正常工作。测验开始陷入#1。
为了更好地理解,JSfiddle here。
编辑: 基本上当用户不止一次点击开始按钮时,测验从一开始就开始,但是没有进入下一个问题(第一个问题本身就停留了)
答案 0 :(得分:4)
当您调用bindSubmit
函数时,您将附加到submit
的{{1}}事件。因此,当您按两次开始按钮时,会有两个事件处理程序附加到同一事件,这是因为它的行为不正常。因此,在#quizForm
函数中,您需要始终断开所有bindSubmit
处理程序(submit
),如下所示:
$(document).off('submit');
这是你提到的更新的原始小提琴 https://jsfiddle.net/t4p8x02b/35/
答案 1 :(得分:0)
我在您的代码中发现了一些事情,需要纠正这些事情以便更好地管理代码:
init()
库之外公开quiz
,首次初始化时,您可以在从库中返回之前调用init()
(quiz()模块代码结束)。init()
会使您的quiz()
模块容易受到攻击,因为任何可能破坏整个quiz()
逻辑的外部程序都会对其进行修改。bindSubmit()
内,您无需重新初始化测验实例即可调用init()
,而只需调用init()
(请参阅下面的代码段),您的事件处理程序将调用它任何错误 [这是关闭的魔力] 。<强> bindSubmit():强>
$(document).on('submit', '#quizForm', function (event) {
event.preventDefault();
next(this);
init();
});