2009-11-04 8 views
8

मैं एक सेटटाइमआउट फ़ंक्शन के अंदर एक jQuery कथन का उपयोग करने का प्रयास कर रहा हूं, लेकिन मुझे इसे काम नहीं मिल रहा है। मैं वेरिएंट की एक बहुत कुछ करने की कोशिश की, इस तरह (मैं का उपयोग कर रहा हूँ 'इस' क्योंकि setTimeout एक प्रत्येक कार्य के अंदर है, और चयनकर्ता कैश्ड/एक वस्तु है, इस प्रकार $ चयनकर्ता में संग्रहीत किया जाता है):सेटटाइमआउट फ़ंक्शन (jQuery) में वेरिएबल्स

setTimeout("" + this.$selector + ".val('" + this.savVal + "')", 1); 

मुझे यह कैसे लिखना है?

धन्यवाद!

+3

'सेटटाइमआउट()' और 'setInterval()' में स्ट्रिंग अप्रचलित हैं। इसके बजाय कार्यों का उपयोग किया जाना चाहिए। –

उत्तर

1

आप शायद ऐसा कुछ कर सकते हैं, यदि आप जिस चर का उपयोग करने का प्रयास कर रहे हैं उसे लूप के प्रत्येक चरण में परिभाषित किया गया है।

var myObj = { 
    $selector: myConfigObj.$myCachedSelector 
} 

$.each([ myObj, mySecondObj, myThirdObj ], function(n, $selector) { 
    setTimeout(function() { 
     $selector.val(saveVal); 
    }, 1); 
}); 
+0

मार्को, "myConfigObj। $ MyCachedSelector" समस्या प्रतीत होता है। यह "अपरिभाषित" लौटाता है। मैंने इसे एक साधारण स्ट्रिंग के साथ बदल दिया जो सही ढंग से वापस आ जाता है ... – north

19

जब आप जब बुला setTimeout इस संरचना का उपयोग वर्तमान this आइटम के संरक्षण की जरूरत: -

setTimeout((function(self) { 
    return function() { $selector.val(self.savVal) }; 
})(this), 1); 

यह बाहरी कार्यों निष्पादन संदर्भ से एक बंद पैदा करता है। बाहरी फ़ंक्शन एक आंतरिक फ़ंक्शन देता है जो self पैरामीटर तक पहुंच जाएगा। जब भी टाइमआउट होता है तब उसका आंतरिक कार्य होता है, फिर भी self का मान मूल this मान पर रखेगा।

+0

सुरुचिपूर्ण अगर लोगों को थोड़ा सा गूढ़ बंद करने से परिचित नहीं है। मूर्खतापूर्ण महसूस करें यह पहली बात नहीं थी जब मुझे एहसास हुआ कि आईई पैरामीटर पारित नहीं कर रहा था। मैं अपने बहाने के रूप में ".NET डेवलपर" की मांग करता हूं। यह एक बात है, है ना? –

0

आपके उत्तरों के लिए धन्यवाद।

मैं अब सेटटाइमआउट के अंदर एक फ़ंक्शन का उपयोग कर रहा हूं। लेकिन मुझे पता चला कि वास्तविक समस्या कहीं भी है: प्रत्येक-फ़ंक्शन में मैं ऑब्जेक्ट गुणों तक पहुंचने का प्रयास कर रहा हूं जो कॉन्फ़िगरेशन ऑब्जेक्ट के भीतर गुणों को इंगित कर रहे हैं, लेकिन परिणाम (उदाहरण के लिए। $ Selector) "अपरिभाषित" है ।

var myObj = { 
    $selector: myConfigObj.$myCachedSelector 
} 

$.each([ myObj, mySecondObj, myThirdObj ], function() { 
    //code 
});     

सुनिश्चित नहीं है कि समस्या क्या है। दोनों वस्तुएं एक ही कार्य/दायरे में हैं।

7

एंथनीWJones एक अच्छा उत्तर प्रदान किया, लेकिन एक और समान है, जो लिखना और पढ़ना थोड़ा आसान है। आप बस स्थानीय चर में "इस" के मान को स्टोर करते हैं।

var storedThis = this; 
setTimeout(function() { $selector.val(storedThis.savVal); }, 1);