无法获取setTimeout以在javascript中工作
我使用jquery在div上下滑动 由于某些原因,setTimeout不起作用(看起来像是函数作用域问题) 无法找出以下代码的错误。 (两个函数都在$(document).ready(function(){})内)无法获取setTimeout以在javascript中工作,javascript,jquery,jquery-ui,settimeout,Javascript,Jquery,Jquery Ui,Settimeout,我使用jquery在div上下滑动 由于某些原因,setTimeout不起作用(看起来像是函数作用域问题) 无法找出以下代码的错误。 (两个函数都在$(document).ready(function(){})内) 您是否收到任何错误?您正在将未定义的值作为calbck传递到setTimeout函数中的slideUp $('.slider-thumb').click(function() { var source = $(this).attr("src"); $('#image_
您是否收到任何错误?您正在将未定义的值作为
calbck
传递到setTimeout
函数中的slideUp
$('.slider-thumb').click(function() {
var source = $(this).attr("src");
$('#image_view').css('background-image',"url("+source+")");
$('#image_view').slideDown(1000, calbck);
initiate_timeout();
function calbck(){}
});
function initiate_timeout(){
var time_out = setTimeout(function() {
$('#image_view').slideUp(1000, calbck);
}, 2000);
}
它适用于我(与我修改后的组织):
当我运行您的确切代码()时,我得到一个错误“找不到变量calbck”--我说您未定义就传递的变量。您有一些JS错误和范围问题。在尝试排除错误时,为什么要关闭调试?请将代码更改为:
$('.slider-thumb').click(function(){
var source = $(this).attr("src");
$('#image_view').css('background-image',"url("+source+")");
$('#image_view').slideDown(1000);
setTimeout(function() {
$('#image_view').slideUp(1000);
},2000); // will start 2 seconds after slideDown starts (which is 1 second after it completes)
});
或者更好地使用第一个动画的完成功能来设置计时器:
$('.slider-thumb').click(function(){
var source = $(this).attr("src");
$('#image_view').css('background-image',"url("+source+")");
$('#image_view').slideDown(1000, setTimeout(function() {
$('#image_view').slideUp(1000);
},1000)); // will stay open for 1 second before sliding up again
});
或者,更好的是,使用jQuery的延迟/队列,您可以这样做:
$('.slider-thumb').click(function(){
var source = $(this).attr("src");
$('#image_view').css('background-image',"url("+source+")");
$('#image_view').slideDown(1000).delay(1000).slideUp(1000); // delay 1 sec between effects
});
您试图传递给slideUp的calbck未在您使用它的作用域中定义(在initiate\u timout()
的内部)。它是您的单击处理程序的私有
与使用自己的计时器相比,jQuery可能有更好的方法来连锁效果,但我看不出如果这段代码与HTML匹配,那么这段代码就不能工作的原因
注意:如果您的背景图像尚未预缓存,则在开始向下滑动时可能不会立即加载它。缩进源代码表明您确实存在一些范围问题。calbck函数是click handler函数的私有函数,因此无法启动\u timeout函数。请将calbck设置为顶级函数nction,或使initiate_timeout成为单击处理程序函数的本地函数
$('.slider-thumb').click(function() {
var source = $(this).attr("src");
$('#image_view').css('background-image',"url("+source+")");
$('#image_view').slideDown(1000, calbck);
initiate_timeout();
function calbck(){}
});
function initiate_timeout(){
var time_out = setTimeout(function() {
$('#image_view').slideUp(1000, calbck);
}, 2000);
}
您是否尝试过在
setTimeout()
之前发出警报,以确保函数正在被调用?-1在没有调试的情况下不要提问,以查看您的代码是否存在明显错误。(请参阅我答案中的注释)仍在学习过程中..这比调试快得多。不..我已关闭调试。除了超时部分外,似乎正常工作。为什么您在这里问问题而不先调试?感谢您的输入。按照jfriend00的建议重写它,问题现在消失了。是您指出的范围问题。