You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

超时后遇验证错误,如何切换问卷页面?

问题场景与解决方案

当问卷页面设置了最大完成时间,且页面内问题带有必填项或自定义验证器时,超时后计时器会停在0:00,验证器触发报错,导致无法切换页面。典型场景如课堂测试:平时需要必填规则防止漏答,但超时后必须强制停止答题并跳转。

现有临时方案(逐个清除问题验证器、取消必填)存在扩展性差、修改原始配置的缺陷;手动设置currentPage切换页面时,会因onTimerTick持续触发出现重复切换问题。


方案1:批量处理页面问题+单次执行控制

通过遍历页面所有问题批量修改验证规则,同时添加状态标记避免重复执行逻辑:

// 标记是否已处理超时逻辑,防止重复触发
let hasHandledTimeout = false;

survey.onTimerTick.add((sender, options) => {
  const currentPage = sender.currentPage;
  if (
    currentPage.name === "myPage" &&
    currentPage.timeSpent >= currentPage.maxTimeToFinish &&
    !hasHandledTimeout
  ) {
    hasHandledTimeout = true;
    // 批量处理当前页面所有问题
    currentPage.questions.forEach(q => {
      q.clearErrors();
      q.setPropertyValue("validators", []);
      q.setPropertyValue("isRequired", false);
    });
    // 跳转至下一页
    sender.currentPage = sender.getNextPage();
  }
});

方案2:拦截页面验证(更安全,不修改原始配置)

利用onValidatePage事件,超时后直接跳过页面验证逻辑,无需修改问题配置:

let isPageTimedOut = false;

survey.onTimerTick.add((sender, options) => {
  const currentPage = sender.currentPage;
  if (
    currentPage.name === "myPage" &&
    currentPage.timeSpent >= currentPage.maxTimeToFinish
  ) {
    isPageTimedOut = true;
    // 停止计时器,减少不必要的事件触发
    currentPage.stopTimer();
    // 触发页面跳转
    sender.currentPage = sender.getNextPage();
  }
});

// 拦截页面验证流程,超时后强制标记为有效
survey.onValidatePage.add((sender, options) => {
  if (options.page.name === "myPage" && isPageTimedOut) {
    options.isValid = true;
    options.errors = [];
  }
});

关键注意事项

  • 必须添加状态标记(如hasHandledTimeout/isPageTimedOut),避免onTimerTick持续触发导致重复执行。
  • 超时后调用currentPage.stopTimer()可停止计时器,减少冗余事件。
  • 方案2无需修改问卷原始配置,更适配复杂问卷场景。

内容的提问来源于stack exchange,提问作者Jakub Jędrusiak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 13:32:08