jQuery之timer不刷新,没有报错信息;增加调试信息显示timer只执行一次;

表现:timer不刷新,没有报错信息;增加调试信息显示timer只执行一次;
原因:

    var timer = $.timer (1000, MAIN.show_time,false);
    //var timer = $.timer (1000, MAIN.show_time(),false);
    //上边注释的这句是错误的,因为调用回调函数的时候,调用的是MAIN的一个属性,不是方法,不需要加括号;

没有弄清楚,执行一次的原因,感觉一次都不应该执行;

单步调试:
执行到下图中的86行时,直接进入MAIN.shou_time中,没有检测这个函数的格式是否正确,等该函数执行结束,进入jQuery.timer.js中,执行jQuery.timer对应的function,如下图中的第二张图所示,此时对callback进行了检测;
图一

图2
显示callback为undefined,之后,执行到图中的最后一行,直接return false,就没有执行下去了,但是还是不清楚为何执行了一次;

下图是语句正确的情况下,单步调试的情况:
图3
此时,callback为function(),经15行判断后,继续向下执行;

通过以上测试,
执行一次应该是因为js执行的时候,读取到MAIN.show_time后就进入MAIN.show_time中执行了;
可能写Java留下的固定思维吧,很难理解这种情况,等以后更理解js的执行原理的时候,再回头看吧;


以下为源代码:
注:源代码是邵发的Java课程中的代码,特此说明;

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'test2.jsp' starting page</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    

    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
<!-- jquery & bootstrap -->
    <script src="jquery/jquery.js"></script>
    <script src="jquery/jquery.timer.js"></script>
    <link rel="stylesheet" href="bootstrap/css/bootstrap.css">
    <script src="bootstrap/js/bootstrap.min.js"></script>


    <!-- 通用javascript -->
    <script src="common/AfUtility.js"></script> 

    <style>

        #test-panel .time
        {
            width: 80%;
            margin: 100px auto auto auto;
            border: 1px solid #888;
            border-radius: 4px;
            padding: 10px;
        }
    </style>
  </head>

  <body>

    <div id="test-panel">
        <div class="time"> </div>
    </div>

  <script>
    var MAIN = {};
    MAIN.panel = $("#test-panel");
    MAIN.time_str = function()
      {
          var now=new Date(); 
          var year=now.getFullYear();   //年 
          var month=now.getMonth()+1;   //月
          var day=now.getDate();      //日
          var hh=now.getHours();      //时
          var mm=now.getMinutes();     //分
          var sc=now.getSeconds();     //秒 

          var curTime = "";
          curTime += year;  
          curTime += "-";         
          curTime += month<10?'0'+month:month; 
          curTime += "-";
          curTime += day<10?'0'+day:day;
          curTime += " ";
          curTime += hh<10?'0'+hh:hh; 
          curTime += ":";
          curTime += mm<10?'0'+mm:mm;
          curTime += ":";
          curTime += sc<10?'0'+sc:sc; 
          return curTime;
      }

      /* 显示当前时间 */
      MAIN.show_time = function()
      {
        var tm = MAIN.time_str();
        $(".time",MAIN.panel).html(tm);
        console.log("1");
        console.log(tm);
      };

      $("#test-panel").ready(function(){
          var timer = $.timer (1000, MAIN.show_time,false);
         //var timer = $.timer (1000, MAIN.show_time(),false);
         //上边注释的这句是错误的,因为调用回调函数的时候,调用的是MAIN的一个属性,不是方法,不需要加括号;
      });

  </script>
  </body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值