使用带有.each()的onLoad时出现问题

时间:2014-07-03 18:00:31

标签: javascript jquery

似乎点击功能根本没有绑定,任何人都知道为什么?

 <img src='img.jpg'/>

 $("img").each(function(){
   var src = $(this).attr('src');
   var img = new Image();
   img.src = src;
   img.onLoad = function(){
     $(this).click(function(){ alert( 'loaded' }); // < not binding
   } 
 });

不知道还有什么可以尝试。

3 个答案:

答案 0 :(得分:3)

JavaScript区分大小写。

它是onload,而不是onLoad

第二个问题是你将click处理程序绑定到新创建的var img,它永远不会添加到DOM中。您将其绑定到img = new Image()您在顶部的<img>标记。

忽略this并尝试以下操作:

 $("img").each(function(i, el){
   var $el = $(el);
   var src = $el.attr('src');
   var img = new Image();
   img.src = src;

   img.onload = function(){
     $el.click(function(){ alert( 'loaded' }); // < not binding
   } 
 });

答案 1 :(得分:2)

  1. 事件是小写的
  2. onload函数中的
  3. this不是DOM中的图像
  4. 应始终在绑定onload处理程序后设置源
  5. 您似乎错过了alert()
  6. 中的右括号

    $("img").each(function(index, element){
       var img = new Image();
    
       img.onload = function(){
         $(element).on('click', function(){ 
               alert( 'loaded');
         });
       } 
    
       img.src = this.src;
    
       if (img.complete) img.onload();
    
    });
    

答案 2 :(得分:0)

由于您已经在使用jQuery,因此可以按如下方式使用它:

 var that = $(this);
 $(img).load(function(){
      that.click(function(){ alert( 'loaded' }); 
 }); 

加载image后,click事件将绑定到图像。