2013-06-13 3 views
6

पर पैरामीटर कैसे पास करें मैं जावास्क्रिप्ट के लिए अपेक्षाकृत नौसिखिया हूं। मैं एक साधारण काउंटर कार्यक्रम है कि 10 से उलटी गिनती जब तक यह तक पहुँचता है 1.setTimeout फ़ंक्शन

<script type="text/javascript"> 
    function countDown(secs) { 
     var element = document.getElementById("status"); 
     element.innerHTML = "Please wait for "+secs+" seconds"; 
     if(secs < 1) { 
      clearTimeout(timer); 
      element.innerHTML = '<h2>Countdown Complete!</h2>'; 
      element.innerHTML += '<a href="#">Click here now</a>'; 
     } 
     secs--; 
--->  **var timer = setTimeout('countDown('secs')',1000);** 
    } 
    </script> 
    <div id="status"></div> 
    <script type="text/javascript">countDown(10);</script> 

तब मैं काउंटडाउन कार्यप्रणाली को '+secs+' के रूप में पैरामीटर गुजर करने की कोशिश की शुरू होता है लिखा है।

var timer = setTimeout('countDown('+secs+')',1000); 

परिवर्तन कार्यों के ऊपर।

मेरा प्रश्न है कि मुझे पैरामीटर को '+ सेकंड +' के रूप में क्यों पास करना चाहिए और न केवल 'सेक'? इससे क्या फर्क पड़ता है?

+1

[यहाँ] (http:

setTimeout(countDown,1000,secs); 

मैं इस लिंक का सुझाव: //stackoverflow.com/a/10313023/1144176) 'setTimeout' का सही तरीके से उपयोग करने के तरीके के बारे में एक शानदार अवलोकन। –

+0

@JakeStoeffler कमाल लिंक! – rab

+0

[जावास्क्रिप्ट, सेटटाइमआउट] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/10312963/javascript-settimeout) – jahroy

उत्तर

10

उपयोग

var timer = setTimeout(function(){ 
     countDown(secs) 
    },1000); 

या

var timer = setTimeout('countDown(' + secs + ')',1000); 

अपने मामले समस्या अपने + हस्ताक्षर के बिना एक चर के साथ स्ट्रिंग संयोजन उपयोग कर रहे थे (मेरी दूसरी उदाहरण) के साथ एक वाक्य त्रुटि का कारण होगा था

+0

उपयोगकर्ता 'secs' चर पारित करना चाहता है, इसलिए इसे' countDown (secs) ' – rab

+0

@ रब हां, बस –

+0

सही है इस काम को @rab। क्या आप इसके लिए किसी प्रकार की स्पष्टीकरण की व्याख्या या संकेत दे सकते हैं। – vijju

1

बस इस तरह की कमी करने के लिए एक बंद करें लिखें:

if (secs < 1) { 
    element.innerHTML = '<h2>Countdown Complete!</h2>'; 
    element.innerHTML += '<a href="#">Click here now</a>'; 
} else { 
    // wait 1 second 
    setTimeout(function() { 
     countDown(secs - 1); // decrement and run ourselves again 
    }, 1000); 
} 

मैंने को सरल else स्थिति के पक्ष में भी हटा दिया है।

9

आपका पहला प्रयास एक synax त्रुटि है:

var timer = setTimeout('countDown('secs')',1000); 

आप setTimeout के लिए एक स्ट्रिंग पारित करने के लिए (जो एक बुरा विचार के साथ शुरू होता है) की कोशिश कर रहे हैं, लेकिन आप स्ट्रिंग को ठीक से नहीं बना रहे।

शब्द secs आसपास एकल उद्धरण से बच गया नहीं कर रहे हैं, तो आप वास्तव में स्ट्रिंग शाब्दिक countDown( चर secs द्वारा पीछा किया, स्ट्रिंग शाब्दिक ) के बाद गुजर रहे हैं। क्योंकि तारों के बीच कोई ऑपरेटर नहीं हैं, यह अमान्य वाक्यविन्यास है।

हालांकि, जब तुम + प्रतीकों का उपयोग, आप 3 तार एक साथ विधि मंगलाचरण आप चाहते हैं (+ऑपरेटर जावास्क्रिप्ट में तार जोड़ लिए किया जाता है) बनाने के लिए जोड़ रहे हैं:

'countDown(' + 'secs' + ')' === 'countDown(secs)' 

तीन स्ट्रिंग्स एक साथ जोड़ते हैं जिसमें एक स्ट्रिंग होती है जिसमें वैध जावास्क्रिप्ट होता है, इसलिए इसे सेटटाइमआउट() फ़ंक्शन पर भेजा जा सकता है।

आप हालांकि setTimeout के लिए एक स्ट्रिंग पारित कर सकते हैं(), बेहतर दृष्टिकोण एक समारोह संदर्भ पारित करने के लिए है।

यह आमतौर पर इस तरह एक गुमनाम समारोह के साथ किया जाता है:

setTimeout(function() { 
    countDown(secs); 
}, 1000); 

आप एक पैरामीटर पारित करने के लिए की जरूरत नहीं है, तो आप ऐसा कर सकते हैं:

function countDown() { 
    alert("10... 9... 8..."); 
} 

setTimeout(countDown, 1000); 

ध्यान दें कि जब एक समारोह संदर्भ एक चर के रूप में निर्दिष्ट है, आप () प्रतीकों का उपयोग नहीं करते हैं। जब आप जावास्क्रिप्ट में फ़ंक्शन के बाद ब्रांड्स का उपयोग करते हैं, तो फ़ंक्शन लागू होता है।

+0

धन्यवाद @ jahroy यह वास्तव में उपयोगी है – vijju

+1

कोई समस्या नहीं है। मदद करने में खुशी। एक एफवाईआई के रूप में, मुझे हमेशा एमडीएन दस्तावेज जावास्क्रिप्ट के लिए सबसे अच्छा संदर्भ माना जाता है। तो .... जब मेरे पास _setTimeout() _ काम करता है, इस बारे में कोई सवाल है, तो पहली बात यह है कि मैं हमेशा Google ["_mdn जावास्क्रिप्ट settimeout_"] (https://developer.mozilla.org/en-US/docs/ वेब/एपीआई/window.setTimeout)। – jahroy

+0

या बल्कि 'settimeout -w3schools' :) –

1

setTimeout फ़ंक्शन आपको फ़ंक्शन में अतिरिक्त पैरामीटर पास करने की अनुमति देता है।

var timer = setTimeout(countDown, 1000, secs); 

यह IE के कुछ पुराने संस्करणों को छोड़कर सभी प्रमुख ब्राउज़रों में समर्थित है: इसलिए आप अपने कोड इस प्रकार पुनर्लेखन कर सकते हैं। अधिक जानकारी के लिए यह प्रश्न देखें: Why does Underscore.js have a delay function?

1

आदित का सही विचार था। मुझे लूप के भीतर कई टाइमआउट शुरू करने की आवश्यकता थी, और वे सभी वैरिएबल सेट के साथ एक ही मूल्य पर समाप्त हो गए। यहां एक पहेली है जो बताती है कि एकमात्र तरीका जो अतुल्यकालिक रूप से अच्छी तरह से काम करता है वह आदित है।

http://jsfiddle.net/85fmwew4/

for(i=0;i<10;i++){ 
    setTimeout(function(){bad(i)}, 1000) // bad for async 
    setTimeout(good, 1000, i)    // good for async 
} 
0

यह केवल बात यह है कि मेरे लिए काम किया (Node.js में setTimeout को चर गुजर) है:

setTimeout(function(teamNum,zeroBase,position) { 
    spawnAI(roomIndex, 'scout', teamNum, position); 
}, timeToSpawn,teamNum,zeroBase,position); 
0
अब आधुनिक ब्राउज़रों में हाल ही में जावास्क्रिप्ट अनुकूलन के साथ

, आप कर सकते हैं बस करें:

var timer = setTimeout(countDown(secs) , 1000);

3

setTimeout का उपयोग कर यह करने के लिए एक आसान तरीका: आप बस ऐसे ही कर सकते हैं

setTimeout(FunctionName,delay,arg1,arg2....); 

आपके मामले में: http://javascript.info/settimeout-setinterval

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