Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.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 setTimeout-用于更新数据时不工作_Javascript_Jquery - Fatal编程技术网

Javascript jQuery setTimeout-用于更新数据时不工作

Javascript jQuery setTimeout-用于更新数据时不工作,javascript,jquery,Javascript,Jquery,我有一个缩略图列表。当我点击缩略图时,我希望在半秒钟后加载图像。这是我的密码: $('ul#thumbs li img').click(function() { setTimeout(function() { $('img#image').attr("src", $(this).attr("src").replace("_thumb", "")); }, 500); }); 当我点击其中一个拇指时,什么也没发生。如果我删除setTimeout函数,并立即加载

我有一个缩略图列表。当我点击缩略图时,我希望在半秒钟后加载图像。这是我的密码:

$('ul#thumbs li img').click(function() {

    setTimeout(function() {
        $('img#image').attr("src", $(this).attr("src").replace("_thumb", ""));
    }, 500);

});
当我点击其中一个拇指时,什么也没发生。如果我删除setTimeout函数,并立即加载图像,它就可以正常工作

有人知道为什么这项活动不会举行吗?

这不是你想象的那样。使用setTimeout时,当函数执行时,它不再是对当前元素的引用

您需要确保跟踪正确的元素,如下所示:

$('ul#thumbs li img').click(function() {
    var thumbImg = this;
    setTimeout(function() {
        $('img#image').attr("src", $(thumbImg).attr("src").replace("_thumb", ""));
    }, 500);

});

问题在于超时函数的作用域,请尝试以下操作:

$('ul#thumbs li img').click(function() {
    var self = $(this);
    setTimeout(function() {
        $('img#image').attr("src", self.attr("src").replace("_thumb", ""));
    }, 500);

});
或者更好的是:

$('ul#thumbs li img').click(function() {
    var src = $(this).attr("src").replace("_thumb", "");
    setTimeout(function() {
        $('img#image').attr("src", src);
    }, 500);

});

注意:如果src属性可以在超时时间内更改,则第二个示例可能不起作用。如果它是静态的,它会工作得很好。有趣的是,我不知道。谢谢