js 如何循环执行同一方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js 如何循环执行同一方法相关的知识,希望对你有一定的参考价值。

方法1:function cc (obj) var str+=obj.value;
方法2:function selall()
var cc = document.getElementsByTagName("input");
for (var i = 0; i < cc.length; i++)
cc[i]? //这里如何写才能每个循环都调用方法1?

方法1 内部用了var 表示内部变量 执行完一次后会自动释放;

方法2 内的变量cc不能与方法1重名;
示例代码如下 测试可以
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script language="javascript" type="text/javascript">
var str='';
function cfun(obj) str += obj.value;
function selall()
var cc = document.getElementsByTagName("input");
for (var i = 0; i < cc.length; i++)
cfun(cc[i]);

alert(str);

</script>
</head>
<body>
<input type="text" id="txt1" value="你好" />
<input type="text" id="txt2" value="朋友" />
<a href="javascript:selall()">点击显示</a>
</body>
</html>
参考技术A function dometemp(temp)
    console.log(temp);

function dometemp1(temp)
    console.log(temp);
    setTimeout(function()dometemp1('这是通过setTimeout过来的');,1000);

function dometemp2(temp)
    console.log(temp);


//方法1:利用循环
for(var i=0;i<=100;i++)
  dometemp(i);

//方法2:利用定(延)时器:
//①延时器需要在方法体(dometemp方法)中重复,可用window.clearTimeout()清除
setTimeout(function()dometemp1('这是通过setTimeout过来的');,1000);

//②定时器(可以使用window.clearInterval()清除)
setInterval(function()dometemp2('这是通过setInterval过来的');,1000);

参考技术B

DEMO:

<body>
    <div id="mydiv">0</div>
    <input type="button" value="startTask" onclick="startTask();"/>
</body>

<script>
    //定时器引用
    var taskId;
    function startTask()
        //每秒取调用一次show方法
        taskId=setInterval(show,1000);
    
    //该方法计数器
    function show()
        var div = document.getElementById("mydiv");
        var val = parseInt(div.innerHTML) + 1;
        div.innerHTML = val;
    
</script>

参考技术C selall函数里面定义cc变量,这个变量为局部变量,因为跟方法1的cc同名,因此不能访问到方法1的cc.
如果不同名的话,比如方法1:function bb()
那么直接 bb(cc[i]);就可以了。
但是,你的方法1中做的事情是var str+=obj.value;这里的str也是局部变量,无法把值维持或带出来,等于什么事都没做。
参考技术D 方法2:
function selall()
var objs = document.getElementsByTagName("input");
for (var i = 0; i < objs.length; i++)
//注意cc是函数名,,不要也给你的数组也取跟函数一样的名字,,容易弄混淆
cc(objs[i]);

如何让JS代码里面判断该执行完毕后,再继续循环执行该代码下一次

<html>
<head>
<script>

function testfun()
var frames = document.getElementsByTagName('iframe');
for (var i = 0; i < frames.length; i++)
var frame = frames[i];
if(frame.name == 'frame1')
frame.contentWindow.document.getElementById("form").submit();



</script>
</head>
<body>
<input name="a" type="button" onClick="testfun()" value="submit" >
<iframe src="cs4.asp" name="frame1"></iframe>
<iframe src="cs5.asp" name="frame1"></iframe>
</body>
</html>

如何让JS里的程序循环执行一次延迟两秒再继续执行

function testfun() 
  var frames = document.getElementsByTagName('iframe');
  for (var i = 0; i < frames.length; i++) 
    var frame = frames[i];
    if(frame.name == 'frame1') 
      frame.contentWindow.document.getElementById("form").submit();
    
  
  // 两秒后再执行testfun
  setTimeout(testfun, 2000);


// 如果页面加载后马上执行的话加下面的
// testfun();

// 如果页面加载后等2秒再执行的话加下面的
// setTimeout(testfun, 2000);

追问

大哥 我是想要实现 每次提交一个iframe页面里面的form 延迟2000毫秒,然后再提交下一个iframe页面里面的form,这样的效果。。不是延迟2秒执行提交所有iframe。

感谢大哥再次帮我解决这个问题。

追答

不太明白。
提交->页面加载完->等两秒->再提交?

追问

这个代码不是可以是实现提交页面里所有NAME为 frame1的调用页面里面的表单么。

我希望实现延迟执行

每提交一次 NAME为 frame1的调用页面 然后等两秒

然后再次执行下个被找到的 NAME为 frame1的调用页面

追答function testfun() 
  var q = [];
  var frames = document.getElementsByTagName('iframe');
  for (var i = 0; i < frames.length; i++) 
    var frame = frames[i];
    if(frame.name == 'frame1') 
      // 添加到数组里
      q.push(frame);
    
  

  function submit () 
    if (q.length) 
      // 获取第一个frame并从数组中删除
      var frame = q.shift();
      frame.contentWindow.document.getElementById("form").submit();
      // 两秒后提交下一个
      setTimeout(submit, 2000);
    
  
  // 提交第一个
  submit();

参考技术A setTimeout 参考技术B setInterval 或者setTimeout 你自己查一下吧

以上是关于js 如何循环执行同一方法的主要内容,如果未能解决你的问题,请参考以下文章

js定时执行达到条件退出循环

javascript:循环中如何等待方法完成了再继续?

JS中实现等待一段时间之后开始定时循环执行某个方法?

JS怎样同一时候处理多个window.onload事件

js闭包for循环总是只执行最后一个值得解决方法

Scala:如何在循环中合并数据帧