javascript setTimeout要么没有等待也不会触发或触发

时间:2017-03-14 03:59:08

标签: javascript jquery settimeout momentjs

我要求每12小时或更早提交一份html表单。如果不是,该页面将播放恼人的声音。该页面将显示在安装在车厢内的平板电脑上,并将使用信息亭软件来防止离开该页面。

我正在使用 jQuery 3.1.1 moment.js

<audio id="alarmSound">
    <source src="~/Sounds/railroad_crossing_bell.mp3" type="audio/mpeg" id="alarmSound1" />
    <source src="~/Sounds/railroad_crossing_bell.wav" type="audio/wav" id="alarmSound2" />
    <p class="error">Your browser does not support the &lt;audio&gt; tag</p>
</audio>
<div id="test"></div>

<script>
    //var targetDate = moment("@(LastSubmittedDateTime.Value.ToString("yyyy-MM-dd HH:mm:ss"))", "YYYY-MM-DD HH:mm:ss").add(12, 'hours').valueOf() - moment().valueOf();
    var targetDate = moment().add(2, "minutes");
    var timeToWait = targetDate.valueOf() - moment().valueOf();
    var timerVar;
    var audioVar = $("#alarmSound");
    $("#test").html("<dl><dt>targetDate</dt><dd>" + targetDate.format("YYYY-MM-DD HH:mm:ss") + "</dd><dt>timeToWait</dt><dd>" + timeToWait + "</dd></dd></dl>");

    console.log("configuring #alarmSound");
    $("#alarmSound").muted = false;
    $("#alarmSound").defaultMuted = false;
    $("#alarmSound").loop = true;
    $("#alarmSound").volume = 1.0;
    $("#alarmSound").controls = false;
    $("#alarmSound").preload = "auto";


    function alertFunc() {
        console.log("alertFunc() fired");
        $("#test").html("<p>alertFunc() Fired</p><dl><dt>targetDate</dt> <dd>" + targetDate.format("YYYY-MM-DD HH:mm:ss") + "</dd> <dt>timeToWait</dt> <dd>" + timeToWait + "</dd></dd ></dl >");
        $("#alarmSound").get(0).play();
    }

    function myTimeoutStopFunc() {
        console.log("myTimeoutStopFunc() fired");
        clearTimeout(timerVar);
    }

    $(document).ready(function () {
        console.log("setTimeout(alertFunc, " + timeToWait + ")");
        timerVar = setTimeout(alertFunc, timeToWait);
    });
</script>


<div id="test2"><button name="timerStop" onclick="myTimeoutStopFunc()" >Stop Timer</button></div>

为了进行测试,我将它设置为现在的时间+几分钟。添加一些console.log调用并修复秒数有帮助。

目前正在使用,但音频会在几分钟后停止。

1 个答案:

答案 0 :(得分:0)

菲尔只在评论中发帖,我无法给他答案。我使用毫秒计算从数据库时间值到现在的差异并添加该值。效果很好。