Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.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函数仅在未注释alert()时有效_Javascript_Jquery - Fatal编程技术网

Javascript函数仅在未注释alert()时有效

Javascript函数仅在未注释alert()时有效,javascript,jquery,Javascript,Jquery,我创建了一个javascript函数,它调用一个图像URL数组。在这之后,它会遍历每个图像标记,并每三秒更改一次图像标记的src。整个功能让我有点困惑。出于某种原因,只有在我取消对警报框的注释时,它才会起作用 alert( index + ": " + value ); 起初,我认为这可能是函数正在工作的迹象,但如果没有警报,它的速度太快,我看不见,但我添加了一个settimeout,并在一些图像不存在的实例上运行它,只是为了检查它是否会记录404,而它只会在警报未注释的情况下这样做。

我创建了一个javascript函数,它调用一个图像URL数组。在这之后,它会遍历每个图像标记,并每三秒更改一次图像标记的src。整个功能让我有点困惑。出于某种原因,只有在我取消对警报框的注释时,它才会起作用

   alert( index + ": " + value );
起初,我认为这可能是函数正在工作的迹象,但如果没有警报,它的速度太快,我看不见,但我添加了一个settimeout,并在一些图像不存在的实例上运行它,只是为了检查它是否会记录404,而它只会在警报未注释的情况下这样做。 这是函数的完整代码,包括警报

function displayGalleryImages(pid){

    var images = imageArray[pid]; //array of urls

    jQuery.each(images, function( index, value ) {
         // alert( index + ": " + value );
        setTimeout(function(){  jQuery("#"+pid).attr("src", value)   },3000);
    });
}
我知道这不仅仅是一个评论警告,但我很难看出我错在哪里。
如果有人能发现代码中的错误,或者找到更好的方法来实现函数的任何方面,我会非常感激

之所以发生这种情况,是因为您正在使用
setTimeout()
内部循环。 当您编写
警报时,浏览器将等待您的操作,因此它可以工作

试试这个:

var len = images.length;
iterate_img(0);
function iterate_img(num){
    setTimeout(function(){
        jQuery("#"+pid).attr("src", value);
        if(num < len-1){
            iterate_img(num+1);
        }        
    },3000);
}
var len=images.length;
迭代_img(0);
函数迭代(num){
setTimeout(函数(){
jQuery(“#”+pid).attr(“src”,value);
if(num
我使用了递归函数


希望它能帮助您。

这是因为
值的范围。它在3秒钟内被取消了

jQuery.proxy是我的解决方案

你最好使用:

 function callback(){
   jQuery("#"+this.myPid).attr("src", this.myValue);
 }

 ....
 var callbackThis = {myValue:value, myPid:pid};
 setTimeout(jQuery.proxy(callback, callbackThis),3000);
因此callbackThis包装值,callbackThis使用callbackThis的值。

试试这个

function displayGalleryImages(pid){

    var images = imageArray[pid]; //array of urls

    setAttr(pid,images,0);
}

function setAttr(pid,images,index){
    if(images[index]!=null){
       var value=images[index];
       jQuery("#"+pid).attr("src", value);
       index++;
       setTimeout(function(){   setAttr(pid,images,index);  },3000);
    }
}

不要使用
alert()
进行调试,这就是控制台的作用<代码>控制台日志(索引+“:”+值)
$(文档)下执行它。就绪
处理程序..仅供参考:在Internet Exploder中,如果禁用开发人员模式(F12),尝试使用console对象将导致错误。(所以要小心;)这是因为你在jquery的每个循环中都使用了setTimeout…当你取消对警报框的注释时,执行将被暂停。@Nelson:jquery有一个$(function(){…})的快捷方式;这是一种享受。现在看看我以前的解决方案,我不明白我是怎么搞不明白的,但非常感谢你的回答。