如何每秒调用一个方法?

时间:2013-04-28 11:17:44

标签: c# javascript

我正在设计一个网站,我想每隔一段时间调用这个方法,我使用asp.net并且不知道关于javascript的任何事情但是我已经使用了这个代码(我得到了谷歌)并且它没有不行!!! 我把所有代码放在这里(它在webform.aspx中)!

<script >
$(document).ready(function(){ 
var interval=setInterval(time(),5000);}
</script>
<script  runat="server">
// <![CDATA[

 public void time()
 { 

        DateTime date = DateTime.Now;
        string hour = date.Hour.ToString();
        string min = date.Minute.ToString();
        string sec = date.Second.ToString();
        time1.Value = hour + ":" + min + ":" + sec;
 }

感谢帮助!

4 个答案:

答案 0 :(得分:2)

由于以下原因,代码不起作用:

  • time()调用中有time而不是setInterval,它将调用该函数并使用返回值作为回调,而不是将该函数用作回调。< / p>

  • 您已将时间设置为五秒(5000毫秒)而不是一秒(1000毫秒)。

  • 您缺少ready来电的右括号。

  • 该函数不是Javascript,而是C#。您无法直接从客户端脚本调用服务器代码。

要解决所有问题(假设页面中有一个标识为time1的字段),它将是:

<script type="text/javascript">

$(document).ready(function(){ 
  var interval = setInterval(time, 1000);
});

function time() {
  var date = new Date();
  var hour = date.getHours();
  var min = date.getMinutes();
  var sec = date.getSeconds();
  $('#time1').val(hour + ":" + min + ":" + sec);
}

</script>

答案 1 :(得分:1)

您遇到语法错误问题,但未包含jquery。

我的示例基于您的代码但使用纯javascript:

<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script>
$(document).ready(function(){
     var interval=setInterval(time, 5000);
}); // ending ')' was missing
</script>
<script>
function time(){
    var date = new Date();
    alert("Hour is: " + date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds());
}
</script>

答案 2 :(得分:1)

好的,你在这里得到了很多不太好的答案。 (编辑:我设法错过了Guffa's answer,这非常好。但是当我提供更多细节时,我会留下这个答案。此外,这个答案不需要jQuery,显然OP不是[否则]使用。)

在JavaScript中,要重复调用函数,您可以使用setInterval(将重复调用它)或setTimeout(将调用它一次)并让函数调度下一个调用本身。在这两种情况下,您都希望为setInterval / setTimeout提供功能参考。你不想给它一个字符串,你不想调用这个函数,这是其他答案所做的。所以:

<script>
(function() {
    var elm = document.getElementById("id_of_element_you_want_to_contain_time");

    setInterval(updateTime, 1000);

    function updateTime() {
        var now = new Date(),
            hours = zeropad(now.getHours(), 2),
            minutes = zeropad(now.getMinutes(), 2),
            seconds = zeropad(now.getSeconds(), 2);

        elm.innerHTML = hours + ":" + minutes + ":" + seconds;
    }

    function zeropad(str, width) {
        str = String(str);
        while (str.length < width) {
           str = "0" + str;
        }
        return str;
    }
})();
</script>

将该脚本放在元素下面<{1}},以便在第一行找到它时该元素存在。

Live Example | Source

现在,请注意,无论您使用id="id_of_element_you_want_to_contain_time"还是一系列setInterval来电,无论哪种方式,您提供的时间都只会大约完成。因此,如果你真的想每秒更新一次,那么如果你每秒都安排它,它会看起来有点不均匀。所以你可能会考虑每隔四分之一秒(250毫秒)做一次,因为你所做的并不是对浏览器造成远程负担。 Live Example | Source

答案 3 :(得分:-1)

您可以使用这样的原生JavaScript函数:

<script type="text/javascript">
    // function like your server-side function
    function time () {
        var now = new Date(); 
        console.log(now.getHours() + ':' + now.getMinutes() + ':' + now.getSeconds());
    }

    window.onload = function () {
        setInterval(time, 1000)
    };
</script>

但是你需要知道JavaScript的1秒实时与1秒不同。