Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.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
jQuery img.load()每次都会导致额外的负载_Jquery_Image_Load - Fatal编程技术网

jQuery img.load()每次都会导致额外的负载

jQuery img.load()每次都会导致额外的负载,jquery,image,load,Jquery,Image,Load,我有一个背景图像,每当ajax事件触发时,我都想重新加载它。在背景图像加载新的图像源后,我淡入一些其他隐藏元素 问题在于,每次加载ajax时,background image.load()success函数都会额外触发一次(第一次,1次加载;第二次,2次加载;以此类推) [编辑以显示更多上下文] // all elements that will be updated (fades array) are faded out // initial ajax request which inclu

我有一个背景图像,每当ajax事件触发时,我都想重新加载它。在背景图像加载新的图像源后,我淡入一些其他隐藏元素

问题在于,每次加载ajax时,background image.load()success函数都会额外触发一次(第一次,1次加载;第二次,2次加载;以此类推)

[编辑以显示更多上下文]

// all elements that will be updated (fades array) are faded out

// initial ajax request which includes bg image path, new content, etc
$.get( imgSrc, function(data) {

    // set background image src to preloaded image
    $("#content>img").attr({"src": imgData.src});
    $("#content>img").attr({"alt": imgData.alt});
    $("#content>img").attr({"title": imgData.title});

    // update other elements with ajax data
    [...]

    // load image and fade in all other elements
    console.log( 'begin bg image load');
    $("#content>img").load(function() {
       console.log( 'this selector matches ' + $(this).length + ' element');
       console.log( '> begin fades..');
       for(var i=0; i < fades.length; i++){
          $( fades[i] ).fadeTo(750, 1);
       }
       console.log( '> faded in ' + i + ' elements');
    });
});
我的假设:

  • 这不是较大循环的一部分:“开始bg图像加载”仅打印一次
  • 只有一个#content>img元素,尽管如果不是这样的话,这种行为是有意义的

这与.load()专门对图像进行操作的方式有关吗?我在这里做错了什么?

在元素上设置
src
属性后,实际上会触发图像加载


当您调用
.load()
时,实际上是在注册一个新的事件处理程序,因此每次调用
$.get()
时,您都在一次又一次地注册该处理程序,结束。

您还需要向我们展示AJAX是如何发生的。我正在使用先前AJAX请求返回的img路径为前面讨论的图像设置src。我假设img.load()然后加载更新的src,但我猜这是一个不确定的假设..不,
img.load
注册回调处理程序。只需设置
.src
就足以触发重新加载。请看我的答案。好的,尽管一次只处理一个图像,但产生问题的是多个事件处理程序。酷。但这让我又回到了另一个我认为已经解决的问题:如何延迟一个动作(在其他元素中淡入)直到图像加载到浏览器中?如果将整个
.load()
块移到
$.get()
回调之外,它可能“正常工作”。不好:元素在设置图像src之前淡入。无论如何,根据firebug控制台。@doub1ejack您仍然在
.load()
回调中进行淡入淡出?我注释掉了整个
$(“#content>img”).load()
函数,并将淡入淡入淡出循环移动到
$.get()
结束后的行。
begin bg image load
this selector matches 1 element
> begin fades..
> faded in 7 elements
this selector matches 1 element
> begin fades..
> faded in 7 elements
this selector matches 1 element
> begin fades..
> faded in 7 elements