Jquery:attr后如何进行回调?

Avi*_*i C 9 html css jquery

我想先改变img src然后完成其他的.像这样的东西 -

$('#bgImage').attr('src','images/'+bgImage, function() {
    alert('inside');
});
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

Ric*_*uen 26

或许另一行代码?

$('#bgImage').attr('src','images/'+bgImage),
$('#searchPin').css("top",y+"px");
$('#searchPin').css("left",x+"px");
Run Code Online (Sandbox Code Playgroud)

如果您想等待图像加载,您可能正在寻找事件load:

$('#bgImage').load(function() {
    $('#searchPin').css("top",y+"px");
    $('#searchPin').css("left",x+"px");
}).attr('src','images/'+bgImage);
Run Code Online (Sandbox Code Playgroud)

请注意,load(...)事件处理程序是在使用之前更改src属性之前创建的attr- 如果图像已被缓存.

如果您不止一次这样做,您可能也想要研究一下unbind.

  • 我相信你应该在更改src之前绑定负载,以防目标已经被缓存. (3认同)
  • 最好在更改`src`属性之前将处理程序"绑定"到`load`事件.这是因为如果图像被缓存,那么它将在你附加处理程序之前加载它并且它不会被调用..你也应该将两个调用链接到同一个元素,或者更好,因为它们都是`css`方法使用接受多个选项的object参数来改变`.css({top:y +'px',left:x +'px'})` (2认同)

Jac*_*son 9

当您更改图像的源时,它将被加载,并在完成后触发onload事件.所以:

$('#bgImage').attr('src','images/'+bgImage).load(function() {
    $('#searchPin').css("top",y+"px");
    $('#searchPin').css("left",x+"px");
});
Run Code Online (Sandbox Code Playgroud)

  • 最好在更改`src`属性之前将处理程序"绑定"到`load`事件.这是因为如果图像被缓存,那么它将在你附加处理程序之前加载它并且它不会被调用..你也应该将两个调用链接到同一个元素,或者更好,因为它们都是`css`方法使用接受多个选项的object参数来改变`.css({top:y +'px',left:x +'px'})` (2认同)

use*_*654 6

.attr立即执行。您实际需要的是等待图像加载完成,然后再执行一些操作。

var $img = $("#bgImage");    
$img.load(function(){
    // image is done loading, do something
    alert("worky (not cached)")
});
$img.attr('src','images/' + bgImage);
Run Code Online (Sandbox Code Playgroud)