jQuery onclick调用函数

时间:2016-07-06 11:11:46

标签: javascript jquery

我找到了一个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

编辑: 基本上当用户不止一次点击开始按钮时,测验从一开始就开始,但是没有进入下一个问题(第一个问题本身就停留了)

2 个答案:

答案 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();
    });