如何使用元素中的值来设置setInterval中的间隔

时间:2013-06-15 14:12:02

标签: javascript javascript-events casting

我有一个页面,显示接受参加活动的人以及有关他们的一些细节。这些人通过填写表格然后提交到数据库来接受。我的页面基本上向它发出一个AJAX请求并获取所有相关数据,然后将它们分类为可读的布局。

我正在尝试为查看此页面的人添加选项以设置刷新率 - 即每次重新生成AJAX请求之前的时间。例如,一个人可以选择30秒,所以每次30秒的页面都会发出另一个AJAX请求并覆盖旧数据......

我所做的是有一些选项的下拉框(60秒,120秒等)。 当部分加载包含AJAX调用的javascript时,从dropbox获取值并将其用作setInterval函数中的参数,如下所示

recurring = setInterval(function() {
                            getSchedule(dateText.trim());
                        },
                        $('input[type=hidden]#rr').val());

但请求是不间断的。起初我认为问题可能是JQuery选择的结果是字符串,当预期的参数应该是数字所以我试过

recurring = setInterval(function() {
                            getSchedule(dateText.trim());
                        },
                        parseInt($('input[type=hidden]#rr').val(),10));

但仍然没有。 我不知道它是否意味着什么,但在测试这段代码时(当我试图查看该值的类型时)

var interval = parseInt( $('input[type=hidden]#rr').val() , 10 );
alert( typeof ( interval ) + ' -- ' + interval );

警告框写入

  

号码 - NaN

任何想法?

好的,这是一个显示html代码的编辑

<div class='fields'>
    <input type='hidden' name='rr' id='rr' value='<?php if ( $_SESSION['rr'] != 0 ) echo $_SESSION['rr']*1000; else echo 86400000;  ?>'/>
    <div style='float:left; padding-top:5px;'>
        <b><i>TIME</i></b>
    </div>
</div>
<div id='schedule' style='overflow:auto;'>
</div>

这是显示数据的部分。 AJAX结果进入计划div并且是更新的结果。隐藏字段包含间隔的毫秒数,是我使用JQuery获取它的地方。它存储在一个数据库中,当加载此页面时,与数据库进行一些通信并从那里获取并将其保存在会话数组中

3 个答案:

答案 0 :(得分:1)

一旦您使用setInterval,除非您明确致电clearInterval,否则continue会调用您的函数。

相反,我建议你应该像这样使用[setTimeout]

setInterval(function () {
    getSchedule(dateText.trim());
},
$('input[type=hidden]#rr').val());

并在函数getSchedule中再次调用setInterval。这样,每次执行该函数时,它都会为自己设置时间段。

function getSchedule(...){
   ...
   setInterval(function () {
        getSchedule(dateText.trim());
    },
    $('input[type=hidden]#rr').val());
}

就输入值而言,在看到您的HTML

之前我无法发表评论

答案 1 :(得分:0)

[更新] 一些评论可能会有所帮助但不能解决您的问题:

供您选择,因为您使用的是id,您应该直接选择(更快):

parseInt($('#rr').val()); // by default the base is 10

注意:你不必使用typeof,因为你总是解析为int,它总是一个数字

我想也许你的问题与那个价值有关,它是否存在?你能检查一下页面并查看html的值是什么吗?

答案 2 :(得分:0)

所以我从来没有理解为什么这个值读错了,也许浏览器在更改之前使用了缓存并加载了javascript ...无论如何,在上面的帮助下,我的最终解决方案是以下

$(document).ready(function() {
    $('#datepicker').datepicker( {
        showOtherMonths: true,
        selectOtherMonths: true,
        dateFormat: 'yy-mm-dd',
        inline: true,
        onSelect: function(dateText, inst) {
                getSchedule(dateText.trim());
        }
    });

    var timeout;
    var today = $('#datepicker').datepicker('getDate');
    getSchedule($.datepicker.formatDate('yy-mm-dd', today));
});

function getSchedule(date)
{   
    if ( 'undefined' === typeof(timeout) ) ; else clearTimeout(timeout);
    timeout = setTimeout(function() {
                            getSchedule(date);
                        },
                        parseInt($('input[type=hidden]#rr').val(), 10)
                        );


    var request = $.ajax({
        type    : 'POST',
        url     : './scripts/php/schedule.php',
        data    : { date: date }
    });

    request.done(function(data,textStatus,jqXHR) {
        var height = $(window).height()-150;
        $("#schedule").height(height).html(data);
        }
    });

    request.fail(function(jqXHR, textStatus, errorThrown) {
    }); 
}

和html

<div class='fields'>
        <input type='hidden' name='rr' id='rr' value='<?php if ( $_SESSION['rr'] != 0 ) echo $_SESSION['rr']*1000; else echo 86400000;  ?>'/>
        <div style='float:left; padding-top:5px;'>
            <b><i>TIME</i></b>
        </div>

</div>
<div id='schedule' style='overflow:auto;'>
</div>