2010-05-29 20 views
5

मैं लूप के लिए जावास्क्रिप्ट का उपयोग कर रहा हूं, किसी विशेष सरणी के माध्यम से लूप करने और इसके मूल्य को सतर्क करने के लिए। मैं चाहता हूं कि हर चेतावनी के बाद इसे 30 सेकंड तक रोकना चाहिए और फिर जारी रखें ... लूप के अंत तक। मेरी कोड यहाँ जाता है ..किसी विशेष अंतराल के लिए जावास्क्रिप्ट लूप को कैसे रोकें?

for(var i=0; i<valArray.lenght; i++) 
    { 
     alert("The value ="+valArray[i]); 
     //stop for 30seconds..  
    } 

मैं setTimeout() फंक्शन का इस्तेमाल किया है, लेकिन यह पाश अंत बार-बार दोहराना के रूप में काम नहीं कर रहा है ... लेकिन 30seconds अंतराल के लिए रुकें नहीं है ... क्या कोई अन्य रास्ता नहीं है जैसे पीएचपी में नींद समारोह ??

उत्तर

8
for (var i = 0; i < valArray.length; i++) 
    (function(i) { 
    setTimeout(function() { 
     alert(valArray[i]); 
    }, i * 30000); 
    })(i); 

बंद लूप समस्या को ठीक करने के लिए संपादित किया गया।

+0

हे धन्यवाद Delan Azabani ... यह एक बहुत ही उपयोगी जवाब था .. –

+0

कोई बात नहीं। मदद करने के लिए खुश। –

+0

जबकि टाइमआउट कुछ समय के लिए ब्राउज़र पर नियंत्रण वापस करने का तरीका है, यह [क्लोजर लूप समस्या] (http://stackoverflow.com/questions/2568966/how-do-i) के कारण आपको ऐसा नहीं लगता है -pass-मूल्य-न-संदर्भ-के-एक-js-चर-टु-ए-समारोह)। * मैं * प्रत्येक * टाइमआउट कॉलबैक में 'valArray.length' होगा। – bobince

6

जावास्क्रिप्ट में कोई नींद नहीं है। आप के लिए कोड ऊपर refactor कर सकते हैं:

function alert_and_sleep(i) { 
    alert("The value ="+valArray[i]); 
    if(i<valArray.length) { 
    setTimeout('alert_and_sleep('+(i+1)+')',30000); 
    } 
} 
alert_and_sleep(0); 
+0

हालांकि यह काम करता है, 'फॉर' लूप का उपयोग करके और 'i * 30000' के टाइमर बनाने से शायद आपके उत्तर के सेमी-रिकर्सन की तुलना में अच्छा लगता है। –

+0

अच्छा, यह इष्टतम नहीं है, लेकिन IMHO यह प्रश्न से मूल कोड के करीब है। – vartec

संबंधित मुद्दे