javascript - xPages 倒数计时器

标签 javascript xpages

我希望有一个倒数计时器(很像 ticketek 等预订代理网站使用的),这样用户就知道我们将保留 10 分钟的预订时间,他们最好快点填写表格!

我在如何将其他 javascript 合并到 xPage 中的知识上存在差距。如有任何帮助,我将不胜感激。

基本上我的计划如下:

  • 加载页面。
  • 让倒数计时器从 10:00 运行到 0:00
  • 在 0:00,转到新页面并丢失所有输入的数据

为此,我引用了这篇 stackoverflow 帖子 ( The simplest possible JavaScript countdown timer? ) 中的最佳答案,并尝试在 xPage 中使用它。

我已将这段代码按原样合并到 xPage(见下文)中(因此它不起作用)希望它能起作用,然后将其更改为使用计算字段控件。我保留原样,希望有人能指导我指出我对此的理解有误吗?

关于我哪里出错的任何指示,或者如何最好地让这样的控件工作?

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.afterPageLoad>
        <xp:executeScript>
            <xp:this.script><![CDATA[#{javascript:function startTimer(duration, display) {
    var timer = duration, minutes, seconds;
    setInterval(function () {
        minutes = parseInt(timer / 60, 10)
        seconds = parseInt(timer % 60, 10);

        minutes = minutes < 10 ? "0" + minutes : minutes;
        seconds = seconds < 10 ? "0" + seconds : seconds;

        display.textContent = minutes + ":" + seconds;

        if (--timer < 0) {
            timer = duration;
        }
    }, 1000);
}

 var fiveMinutes = 60 * 5,
        display = document.querySelector('#time');
    startTimer(fiveMinutes, display);}]]></xp:this.script>
        </xp:executeScript>
    </xp:this.afterPageLoad>
    <div>
        Please complete in <span id="time">05:00</span>minutes.
</div>
</xp:view>

最佳答案

将 CSJS 代码放入 onClientLoad 事件中。改变一些东西后它现在可以工作了:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view
    xmlns:xp="http://www.ibm.com/xsp/core">
    <xp:eventHandler
        event="onClientLoad"
        submit="false">
        <xp:this.script><![CDATA[
function startTimer(duration, display) {
    var timer = duration;
    setInterval(function () {
        if (--timer <= 0) {
            window.location="http://www.google.de";
        }
        var minutes = parseInt(timer / 60, 10);
        var seconds = parseInt(timer % 60, 10);
        minutes = minutes < 10 ? "0" + minutes : minutes;
        seconds = seconds < 10 ? "0" + seconds : seconds;
        display.innerHTML = minutes + ":" + seconds;
    }, 1000);
}

var fiveMinutes = 60 * 5;
var display = document.getElementById("time");
startTimer(fiveMinutes, display);
]]></xp:this.script>
    </xp:eventHandler>
    <div>
        Please complete in&#160;<span id="time">05:00</span>&#160;minutes.
    </div>
</xp:view>

如果您必须在时间结束后清理 XPage 中的某些内容,那么创建一个面板,在时间结束时部分刷新:

    ...
    if (--timer <= 0) {
        XSP.partialRefreshPost("#{id:timeIsUp}", {params: {timeIsUp: "timeIsUp"}});
    }
    ...

<xp:panel id="timeIsUp">
    <xp:this.rendered><![CDATA[#{javascript: 
        if (param.timeIsUp <== null) {
            ' clean your data
            context.redirectToPage('tooLate')
        };
        true
    }]]></xp:this.rendered>
</xp:panel>

关于javascript - xPages 倒数计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30656629/

相关文章:

javascript - 单击按钮时尝试使用 indexOf 查找数组的索引值

javascript - [画一个特征包围另一个特征]有什么函数或算法吗?

javascript - 当元素使用 fadeIn/fadeOut 进行动画处理时,其顶部的元素会闪烁

javascript - getComponent 方法与 Xpages 上的选项卡混淆

javascript - 如何使用 get() 获取嵌套的 Scope 属性

javascript - 如何在关闭 Ionic 应用程序时执行方法?

javascript - 将 JSON 中的大数字解析为字符串

youtube - 将 YouTube 视频嵌入 XPages 重复控件中

javascript - xpages 页面在 "IDLE"之后自动刷新一段时间(5-10 分钟)

xpages - 如何将客户端 javascript 全局添加到 xpages 应用程序