Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.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
无法获取setTimeout以在javascript中工作_Javascript_Jquery_Jquery Ui_Settimeout - Fatal编程技术网

无法获取setTimeout以在javascript中工作

无法获取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_

我使用jquery在div上下滑动

由于某些原因,setTimeout不起作用(看起来像是函数作用域问题)

无法找出以下代码的错误。 (两个函数都在$(document).ready(function(){})内)


您是否收到任何错误?您正在将未定义的值作为
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的建议重写它,问题现在消失了。是您指出的范围问题。