`

js中每隔一段时间执行方法

 
阅读更多

第一种 :

function reSetDevOptType(prodInstId){
    var aMainObjId="tabResChg"+"_"+prodInstId;
    var aMainObj=document.getElementById(aMainObjId);
    if(aMainObj!=null){
     if(aMainObj.contentWindow.refreshResStateAfterLoad){
     aMainObj.contentWindow.refreshResStateAfterLoad();
     clearTimeout();
     }else{
     window.setTimeout("reSetDevOptType("+prodInstId+");",100);
     }
    }
   }

第二种:

   var iIntervalId = null;
        iIntervalId = setInterval(function(){
          var aMainObjId="tabResChg"+"_"+prodInstId;
       var aMainObj=document.getElementById(aMainObjId);
       if(aMainObj!=null){
        if(aMainObj.contentWindow!=null&&aMainObj.contentWindow!='undefined'){
         if(aMainObj.contentWindow.chgColVisible!=null&&aMainObj.contentWindow.chgColVisible!='undefined'){
          aMainObj.contentWindow.chgColVisible("RES_STATE",false);
          clearInterval(iIntervalId);
         }
        }
       }
         }, 100);

 

 

setTimeout函数定时执行某函数,可在给函数传参时容易出现问题,这里是自己在网上查询的一些解决方法:
1、采用字符串
setTimeout("start(" + argu + ")",1000)
此方法用于传递字符串,无法传递对象
2、匿名函数
setTimeout(function(){ start(argu)},1000); 调用start函数并传arg参数
字符串、对象都行
3、在有些情况下需在循环中使用,如:
window.onload=function(){
       var a=[{id:1},{id:2},{id:3},{id:4}];
       for(var i=0;i<3;i++){
           setTimeout(function(){start(a[i])},1000);
       }
}
function start(obj){ alert(obj.id);}
输出的结果都为 4。因为在一个函数体中,a和i相对于匿名函数是全局的,循环执行完后i=3 ,都执行start(a[3]),所以输出结果相同。
这种情况怎么解决呢,只需把setTimeout封装到一个函数中即可
window.onload=function(){
       var a=[{id:1},{id:2},{id:3},{id:4}];
       for(var i=0;i<3;i++){
            set(a[i]);
       }
}
function set(obj){   setTimeout(function(){start(obj)},1000);   }
obj和匿名函数在同一作用域,所以在匿名函数中可以直接访问obj,而且每次执行setTimeout时都会产生新的匿名函数体和作用域,所以定时执行匿名函数时调用start并传值就不会出问题了。(此为个人的理解,不一定正确)
function start(obj){ alert(obj.id);}
在网上看到有人封装了一个函数,也可实现该功能
var util={
setTimeout:function(fun, delay) {
    if(typeof fun == 'function'){
      var argu = Array.prototype.slice.call(arguments,2);
       var f = (function(){
      fun.apply(null, argu);
      }
    );
     return window.setTimeout(f, delay);
   }
   return window.setTimeout(fun,delay);
}
}
window.onload=function(){
       var a=[{id:1},{id:2},{id:3},{id:4}];
       for(var i=0;i<3;i++){
             util.setTimeout(start,1000,a[i]);
       }
}

 

 

分享到:
评论

相关推荐

    JavaScript定时器使用方法详解

    2、定时执行(一次定时器):某一段程序需要在延迟多少时间后执行【setTimeout()】【clearTimeout()】 定时器使用 使用注意:为了防止定时器累加,使用定时器要先清除后设置;要保证内存中只有一个定时器。 1、循环...

    js每隔5分钟执行一次ajax请求的实现方法

    每隔5分钟执行一次ajax请求,如何实现?下面有个不错的示例,感兴趣的朋友可以参考下

    JS实现定时任务每隔N秒请求后台setInterval定时和ajax请求问题

    先看下面一段代码: DiGui = function (param) { $.ajax({ success: function (returnValue) { window.setInterval(fnSetMarkPoint(), 5000); } }); 调用DiGui()方法后 问题: 每隔0.1秒创建一个setInterval,成...

    Js实现手机端活动弹窗一天只弹一次代码

    Js实现手机端活动弹窗一天只弹一次代码 Js实现手机端活动弹窗一天只弹一次代码 Js实现手机端活动弹窗一天只弹一次代码

    JS定时器使用,定时定点,固定时刻,循环执行详解

    比如说在下一个整点执行,在每一个整点执行,每隔10分钟定时执行的方法。 JavaScript中有两个定时器方法:setTimeout()和setInterval()。 这两个方法都可以用来实现在一个固定时间段之后去执行JavaScript。实际...

    Javascript中setTimeOut和setInterval的定时器用法

    Javascript的setTimeOut和setInterval函数应用非常广泛,它们都用来处理延时和定时任务,比如打开网页一段时间后弹出一个登录框,页面每隔一段时间发送异步请求获取最新数据等等。但它们的应用是有区别的。 ...

    重庆天气资源的完整项目包

    这需要使用到定时器,当爬取后前端也需要每隔一段时间更新页面数据且刷新当前的页面因为浏览器的运行机制,感兴趣的可以去搜搜浏览器的运行机制,总之前端与后端都需要用到定时器,且每隔一段时间去执行一次任务。...

    frequently:每隔一段时间执行一个函数,加上按需执行,同时避免竞争条件。 非常适合实施“后台保存”和其他轮询操作

    频繁地 频繁地实现“后台保存”很方便,或者任何时候你希望某事“经常发生,加上我想要的时候,但永远不会同时发生”。例子 var frequently = require ( 'frequently' ) ;var save = frequently ( doSave , 5000 ) ;...

    计时器倒计时

    js中计时器重要使用window.setInterval()方法和window.setTimeout()方法, 其中setInterval()方法的作用是每隔一段时间执行一次方法,而window.setTimeo...

    JavaScript SetInterval与setTimeout使用方法详解

    它们都有两个参数,一个是将要执行的代码字符串,还有一个是以毫秒为单位的时间间隔,当过了那个时间段之后就将执行那段代码。不过这两个函数还是有区别的,setInterval在执行完一次代码之后,经过了那个固定的时间...

    JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)

    // 每隔五秒定时刷新当前窗口 setTimeout("self.location.reload();",5000); //js 定时关闭窗口(ie和FF中测试过) //6秒后自动关闭当前窗口 setTimeout("window.opener=null;window.close()",6000); 下面给大家介绍...

    详解JS中定时器setInterval和setTImeout的this指向问题

    Js是一个单线程语言,可以通过setTimeout()和setInterval()来设置代码在指定时刻运行,前者是在指定时间后执行,后者是指每隔一段时间执行。两者的使用方法类似。 最近在练习写一个小例子的时候用到了定时器,发现...

    JavaScript笔记

    笔试题:js中方法定义集中方式: A:function compare(a,b){return a-b;}---*可以任意地方声明方法* B:var compare=function(a,b){return a-b;} ---| --其实方法名也是方法对象的变量名;等号右边其实就是1个...

    javascript入门笔记

    函数(function),是一段预定义好,并且可以被反复使用的代码块 预定义好 :事先声明,但不是马上执行 反复使用 :可以被多次调用 代码块 :包含多条可执行的语句 2、函数的声明与调用 1、普通函数 语法: ...

    javascript基于定时器实现进度条功能实例

    1.setInterval(function(函数),time(每隔多少时间执行一次函数,单位是毫秒)) 会重复执行某项操作 2.setTimeout 运用在延迟一段时间,再进行某项操作 setTimeout(function,time) ,setTimeout 不会重复! 停止定时器 ...

    JS中的防抖与节流及作用详解

    也就是说即预先设定一个执行周期,当调用动作的时刻大于等于执行周期则执行该动作,然后进入下一个新周期,一个比较形象的例子是如果将水龙头拧紧直到水是以水滴的形式流出,那你会发现每隔一段时间,就会有一滴水...

    JavaScript setInterval()与setTimeout()计时器

    JavaScript是单线程语言,但是它可以通过设置超时值和间歇时间值来指定代码在特定的时刻执行。超时值是指在指定时间之后...JavaScript是一个单线程序的解释器,因此一定时间内只能执行一段代码。为了控制要执行的代码,

    大名鼎鼎SWFUpload- Flash+JS 上传

    当Flash上传文件的时候,由开发人员预定义的Javascript事件会被定时触发以便来更新页面中的UI,同时还提供上传状态和错误信息。 选定的文件的上传和它所在页面、表单是独立的。每个文件都是单独上传的,这就保证了...

    javascript 定时自动切换的选项卡Tab

    JavaScript配合CSS制作一个能自动 切换的网页选项卡,每隔一段时间,它就自动切换选项卡列表和标题,时间自设.

    深入理解JavaScript定时机制

    认为setTimeout中的问候方法会立即被执行,因为这并不是凭空而说,而是JavaScript API文档明确定义第二个参数意义为隔多少毫秒后,回调方法就会被执行. 这里设成0毫秒,理所当然就立即被执行了. 同理对setInterval的...

Global site tag (gtag.js) - Google Analytics