2012-05-12 50 views
0

我有兩個容器,每個容器觸發一些函數,它必須傳遞對象引用。 該函數具有嵌套的隊列和setTimeout,我需要通過它們兩個來傳遞對象引用,以在正確的對象上執行它。如何將參數傳遞給隊列_然後_到setTimeout?...混淆

這是我的嘗試:

var pimg=parent.find('.prod_img'); // This is the object I actually need to pass; 

    pimg.children('img:last').queue((function(aaa){ 
     return function() { 
     whatthe= (function (itema) { 
       return function() { 
       itema.children('img').each(function(){ 
        alert(itema.attr('id')); 
       //alert used for debug. 
$(this).stop(false,false).animate({opacity:0},400,function(){ 
        }); 
       }); 
       } 
      })(aaa) 
     aaa.data('timeout',window.setTimeout("whatthe()", 400));  
     } 
    })(pimg) 
    ); 

現在發生的事情是,如果我趕緊觸發我的兩個對象的這一功能,它會提醒相同的ID,這表明它永遠不會傳遞對象引用。

請注意,pimg是實際的對象,然後在隊列引用中調用aaa,然後在setTimeout引用中調用itema,但它們都指向同一個對象。

任何意見,讚賞。由於

+3

_「的任何建議都讚賞」 _ **不要傳遞字符串到'setTimeout'是我的建議... ** – gdoron

+0

但我沒有看到任何其他方式......我需要通過它...... :) – Anonymous

+1

@ user1125062:'setTimeout'接受函數引用,所以'setTimeout(whatthe,400)'等價於'setTimeout(「whatthe()」,400)',但沒有隱式調用'eval'。一般來說,你永遠不需要在JavaScript中將實際的*代碼*放在引號中。 –

回答

2

你的代碼是由大腦傷害,我沒有你的HTML來實際測試這一點,但如果我正確理解你的問題,這應該工作:

var pimg = parent.find('.prod_img'); // This is the object I actually need to pass; 

pimg.children('img:last').queue((function(aaa){ 
    return function() { 
     var whatthe = (function (itema) { 
      return function() { 
       itema.children('img').each(function(){ 
        alert(itema.attr('id')); 
        //alert used for debug. 
        $(this).stop(false,false).animate({opacity:0},400, function(){}); 
       }); 
      } 
     })(aaa) 
     aaa.data('timeout',window.setTimeout(whatthe, 400)); 
    } 
})(pimg)); 
+0

我不知道你做了什麼,但它現在有效:D – Anonymous

+0

啊,我看,這是eval的問題,儘管對每個人都是! – Anonymous

+0

@ user1125062:好的,如果有效,請將答案標記爲解決方案;-) –

相關問題