2010-03-30 20 views
11

पर पैरामीटर कैसे पास करें मैं एक बहुआयामी सरणी से एक jquery एनीमेशन बना रहा हूं, और प्रत्येक पुनरावृत्ति के कॉलबैक में मैं सरणी के तत्व का उपयोग करना चाहता हूं। हालांकि किसी भी तरह से मैं हमेशा सभी अलग-अलग तत्वों के बजाय सरणी के अंतिम तत्व के साथ समाप्त होता हूं।jquery एनीमेशन कॉलबैक - कॉलबैक

एचटीएमएल:

<div id="square" style="background-color: #33ff33; width: 100px; height: 100px; position: absolute; left: 100px;"></div>

जावास्क्रिप्ट:

$(document).ready(function() { 

// Array with Label, Left pixels and Animation Lenght (ms) 
LoopArr = new Array(
    new Array(['Dog', 50, 500]), 
    new Array(['Cat', 150, 5000]), 
    new Array(['Cow', 200, 1500]) 
); 

$('#square').click(function() { 

for (x in LoopArr) { 
    $("#square").animate({ left: LoopArr[x][0][1] }, LoopArr[x][0][2], function() { 
     alert (LoopArr[x][0][0]); 
    }); 
} 

}); 

}); 

`

वर्तमान परिणाम: गाय, गाय, गाय

वांछित परिणाम: कुत्ते, बिल्ली, गाय

मैं कैसे सुनिश्चित कर सकता हूं कि प्रासंगिक सरणी तत्व कॉलबैक में वापस आ गया है?

उत्तर

17

समस्या यह है कि x कॉलबैक का मूल्यांकन करने के समय संशोधित होता है। आप इसके लिए एक अलग बंद बनाने की जरूरत:

for (x in LoopArr) { 
    $("#square").animate({ left: LoopArr[x][0][1] }, LoopArr[x][0][2], 
     (function (z) { 
     return function() { 
      alert (LoopArr[z][0][0]); 
     } 
    })(x)); 
} 

मैं स्पष्टीकरण के लिए यहाँ z लिए पैरामीटर का नाम बदला है, तो आप कार्य करने के लिए एक तर्क है, जो एक समारोह है कि का उपयोग करता है देता है के रूप में x गुजर रहे हैं z वैरिएबल स्कॉप्ड, जो x की स्थिति को पारित करते समय संग्रहीत करता है।

+0

धन्यवाद, एक आकर्षण की तरह काम करता है! – Hans

7

जावास्क्रिप्ट में क्लासिक त्रुटि। इस प्रयास करें:

for (x in LoopArr) { 
    (function(x) { 
     $("#square").animate({ left: LoopArr[x][0][1] }, LoopArr[x][0][2], function() { 
     alert (LoopArr[x][0][0]); 
     }); 
    })(x); 
} 

सुनिश्चित करें कि प्रत्येक एनीमेशन कॉलबैक के रूप में पाश कार्यान्वित बनाई समारोह के लिए एक अलग चर बनाया जा सकता है बनाता है।