【问题标题】:Holding a function from executing until after a custom javascript alert has cleared阻止函数执行,直到自定义 javascript 警报清除后
【发布时间】:2016-01-23 06:10:16
【问题描述】:

我在我正在制作的问答游戏中使用了 javascript 警报的替代方法。回答一个问题后,应该显示一个“警报”(我在这里调用swal,自定义警报),并且应该在转到#2 问题之后执行nextQuestion

启用自定义警报后,验证仍然可以正常工作,并且警报/模式显示正常。但是,它会移动到下一个问题在用户点击它之前,这与警报的工作方式不同。这是一个问题,因为警报隐藏了下一个问题(并且计时器再次开始运行)。

验证后我已移动that.nextQuestion();,但没有运气。 swal 警报出现后,测验仍会移动到 nextQuestion

如何修复此序列以在清除警报之后而不是之前执行 nextQuestion?

 Quiz.prototype.checkAnswer = function(e) {
   var selectedIndex = $(e.target).data('index');
   var that = this;

  $.getJSON('/api/validate_answer/' + this.participationId + '/' + this.quizCurrent, { answer: selectedIndex }, function(data) {
     if (data.result) {
        swal({ title: "Good job!", text: "You were right!", type: "success", confirmButtonText: "Next" }); 
        that.score += 1;
         }
   else {
      swal({ title: "Wrong!", text: "That wasn't correct...", type: "error", confirmButtonText: "Next" }); 
     }
  that.nextQuestion();
    });
     }


 Quiz.prototype.timer = function() {
    var that = this;

   this.timing--;
   $('div.timer strong').text(this.timing);
   if (this.timing <= 0) {
   $.getJSON('/api/skip_question/' + this.participationId, function() {
    that.nextQuestion();
   })
  }
 }

【问题讨论】:

标签: javascript jquery


【解决方案1】:

您应该将that.nextQuestion() 移动到附加到confirm 按钮的函数中。例如。错误答案如下。

查看演示:fiddle

swal({
    title: "Wrong!",
    text: "That wasn't correct...",
    type: "error",
    confirmButtonText: "Next"
}, function() {
    that.nextQuestion();
});

【讨论】:

  • 可以是swal({ title: "Wrong!", text: "That wasn't correct...", type: "error", confirmButtonText: "Next" }, nextQuestion); 吗?
  • 代码目前在that 对象之外没有nextQuestion 定义。
  • 这行得通。我将 nextQuestion 移到 if 和 else 语句中的函数中。为了创建“序列”,我使用“isConfirm”在按下确认按钮时转到下一个问题。 function(isConfirm) { that.nextQuestion(); }
  • 是的,谢谢@NikolayErmakov。它适用于 validate_answer 部分中的 if/else。如果计时器用完(在 skip_question 中),它的行为很奇怪——它不会跳过,直到我点击确认,正如我想要的那样,但它可能会跳过其余的问题。不知道发生了什么,但现在尝试一些事情。
  • 你为什么要在计时器用完时点击confirm?还是在nextQuestion 函数内部?因为在Quiz.prototype.timer 中不需要确认。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-21
  • 1970-01-01
相关资源
最近更新 更多