Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 循环结束后重新启动jQuery.each()_Javascript_Jquery_Html_Each - Fatal编程技术网

Javascript 循环结束后重新启动jQuery.each()

Javascript 循环结束后重新启动jQuery.each(),javascript,jquery,html,each,Javascript,Jquery,Html,Each,我有一个值数组,我想将这些值设置为输入的占位符 如何使用jQuery.each()实现这一点,因为我用解决了我的问题,而且效果非常好 我尝试重新启动它,但不起作用: if(index==arr.length) index=0; HTML代码: Values : <input name='input' id='input' /> var arr = new Array(); for (var i = 0; i <= 5; i++) { arr.push('Value

我有一个值数组,我想将这些值设置为输入的占位符

如何使用jQuery.each()实现这一点,因为我用解决了我的问题,而且效果非常好

我尝试重新启动它,但不起作用:

if(index==arr.length) index=0;
HTML代码:

 Values : <input name='input' id='input' />
var arr = new Array();
for (var i = 0; i <= 5; i++) {
    arr.push('Value ' + i);//fill array with values
}

function eachChange(){
   var x=0;
   $.each(arr, function (index, value) {
       x++;
   setTimeout(function(){ 
       $('input').attr('placeholder', value);
      }, x * 1000); 
       if(index==arr.length) index=0;

 });   

}
eachChange();//call function
值:
JS/jQuery代码:

 Values : <input name='input' id='input' />
var arr = new Array();
for (var i = 0; i <= 5; i++) {
    arr.push('Value ' + i);//fill array with values
}

function eachChange(){
   var x=0;
   $.each(arr, function (index, value) {
       x++;
   setTimeout(function(){ 
       $('input').attr('placeholder', value);
      }, x * 1000); 
       if(index==arr.length) index=0;

 });   

}
eachChange();//call function
var arr=new Array();

对于(var i=0;i您可以将索引与arr.length进行如下比较

var arr = new Array();
for (var i = 0; i <= 5; i++) {
    arr.push('Value ' + i);//fill array with values
}

function eachChange(){
$.each(arr, function (index, value) {
setTimeout(function(){ 
   $('input').attr('placeholder', value);
   //if it is the last element in arr setTimeout and call eachChange() 
   if(index>=arr.length-1){
        setTimeout(function(){  
           eachChange();     
        },1000);
   }

  }, index * 1000); 
});   

}
eachChange();     
var arr=new Array();
对于(变量i=0;i=arr.length-1){
setTimeout(函数(){
每次更改();
},1000);
}
},指数*1000);
});   
}
每次更改();

我认为您无法重置$的计数器。每个函数,因为它似乎封装了一个简单的for循环。你不能从外面进入柜台

但是,请尝试:

function eachChange(initX){
   var x = initX || 0;
   $.each(arr, function (index, value) {
       x++;
       setTimeout(function(){ 
          $('input').attr('placeholder', value);
       }, x * 1000); 

       // Call yourself but pass current x
       if(index==arr.length) eachChange(x); 

   });   
}

如果希望重置x,请删除initX部分,但我假设您希望它从上一个循环完成的位置开始计数。

尝试以这种方式重新启动
.each()
循环有两个问题。首先也是最重要的,这不是
。each()
真正的工作方式。它不是一个循环,而是对每个元素调用函数的简写。如果为该匿名函数指定了一个名称(让我们使用
setPlaceholder()
),则
。每个()调用基本上都是这样做的:

setPlaceholder(0, arr[0]);
setPlaceholder(1, arr[1]);
setPlaceholder(2, arr[2]);
setPlaceholder(3, arr[3]);
setPlaceholder(4, arr[4]);
setPlaceholder(5, arr[5]);
它传递给函数的索引值不用于循环,因此尝试将其设置为0不会对
.each()
调用产生任何影响

第二个问题是您的if条件。它永远不会真正触发,因为
调用的最后一次“迭代”将使用
arr.length-1
作为其值,而不是
arr.length

我不知道你为什么想让它继续循环,但如果这是你的目标,你可以这样完成:

function eachChange(){
    $.each(arr, function (index, value) {
        setTimeout(function() {
            $('input').attr('placeholder', value);
        }, index * 1000);
        if (index == arr.length - 1) {
            setTimeout(eachChange, (index + 1) * 1000);
        }
    });   

}
eachChange();//call function
应该做的是安排在最后一次占位符更新发生后1秒再次调用
eachChange()
。您可以添加一些其他检查来限制它的递归次数,但是如果您希望它无限期地发生,那么就应该这样做


谢谢您的回复:)