Javascript函数仅在未注释alert()时有效
我创建了一个javascript函数,它调用一个图像URL数组。在这之后,它会遍历每个图像标记,并每三秒更改一次图像标记的src。整个功能让我有点困惑。出于某种原因,只有在我取消对警报框的注释时,它才会起作用Javascript函数仅在未注释alert()时有效,javascript,jquery,Javascript,Jquery,我创建了一个javascript函数,它调用一个图像URL数组。在这之后,它会遍历每个图像标记,并每三秒更改一次图像标记的src。整个功能让我有点困惑。出于某种原因,只有在我取消对警报框的注释时,它才会起作用 alert( index + ": " + value ); 起初,我认为这可能是函数正在工作的迹象,但如果没有警报,它的速度太快,我看不见,但我添加了一个settimeout,并在一些图像不存在的实例上运行它,只是为了检查它是否会记录404,而它只会在警报未注释的情况下这样做。
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(){…})的快捷方式;这是一种享受。现在看看我以前的解决方案,我不明白我是怎么搞不明白的,但非常感谢你的回答。