2011-08-10 14 views
7
var until = $("#time").html(); 

function updateTime() { 
    $("#time").html(
     date("d", until) + " day(s)<br />" + 
     date("h", until) + " hour(s)<br />" + 
     date("i", until) + " minute(s)<br />" + 
     date("s", until) + " second(s)" 
    ); 
} 

setInterval("updateTime(until)",1000); 

हर मैं इस चलाने के लिए, मैं इस त्रुटि मिलती है। मैंने बहुत कुछ करने की कोशिश की है, लेकिन मुझे लगता है कि हर पृष्ठ, कहते हैं कि setInterval() सही है।setInterval काम नहीं करता है?</p> <blockquote> <p>Uncaught ReferenceError: until is not defined (anonymous function)</p> </blockquote> <p>मैं क्या गलत नहीं देख सकते हैं:

+3

आपका 'अपडेटटाइम()' फ़ंक्शन अभी तक 'सेट इंटरवल' में कोई पैरामीटर नहीं लेता है, जिसे आप पास करने का प्रयास कर रहे हैं। हो सकता है कि उस विशिष्ट त्रुटि का कारण न हो लेकिन इसे अभी भी सही करने की आवश्यकता है। – MrMisterMan

+0

मैं इसे सटीक डुप्लिकेट में कसम खाता हूं। किसी भी तरह से, यह करीब है: http: // stackoverflow।कॉम/प्रश्न/5766285/setinterval-and-function –

उत्तर

15

क्लोजर:

setInterval(function() {updateTime(until); }, 1000); 
+0

बहुत बहुत धन्यवाद: डी – Mobilpadde

+0

ओह मेरे अजीब भगवान, आपने मुझे पागलपन से बचाया क्योंकि मैं अपनी प्रस्तुति से 1 घंटे दूर हूं। चीयर्स भाई! :) – KevinIsNowOnline

0

आप eval का एक रूप का उपयोग कर रहे हैं। का उपयोग करें:

setInterval(updateTime,1000); 
5

दिक्कत यह है कि आप एक स्ट्रिंग के रूप setInterval करने के लिए कोड गुजर रहे हैं। इसका मतलब है कि इसका मूल्यांकन वैश्विक दायरे में किया जाता है। परिवर्तनीय until वैश्विक दायरे में मौजूद नहीं है, केवल उस क्षेत्र में जहां इसे परिभाषित किया गया है।

आप में एक समारोह पार कर लेते हैं, इसका मतलब है कि चर until उपलब्ध है (यह "में बंद कर दिया"):

setInterval(function() { 
    updateTime(until); 
},1000); 
0

तार्किक स्पष्टीकरण हो सकता है कि चर until एक वैश्विक चर नहीं है। यदि यह वैश्विक नहीं है (या किसी प्रासंगिक फ़ंक्शन क्लोजर में कैप्चर किया गया है), तो यह तब भी अस्तित्व में नहीं होगा जब सेटइंटरवाल आग लगती है और फ़ंक्शन कॉल के रूप में पारित स्ट्रिंग का मूल्यांकन करने का प्रयास करती है। यह अंतराल सेट करने के लिए एक स्ट्रिंग पास करने के लिए भी एक अच्छा अभ्यास नहीं है, आपको एक वास्तविक जावास्क्रिप्ट फ़ंक्शन पास करना चाहिए।

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

var until = $("#time").html(); 

function updateTime(when) { 
    $("#time").html(
     date("d", when) + " day(s)<br />" + 
     date("h", when) + " hour(s)<br />" + 
     date("i", when) + " minute(s)<br />" + 
     date("s", when) + " second(s)" 
    ); 
} 

setInterval(function() {updateTime(until);}, 1000); 

यह एक समारोह बंद में until के दायरे को पकड़ने और यह गुमनाम अंतराल कॉलबैक फ़ंक्शन पर ही उपलब्ध होगी । इसे एक स्ट्रिंग में डालकर आप पहले ऐसा कर रहे थे, ऐसा बंद नहीं होगा।

मैंने updateTime(until) को भी आपके updateTime() फ़ंक्शन की घोषणा से मेल खाता है।

0

SetInterval का वैश्विक दायरा है, इसलिए मैं अनुमान लगा रहा हूं कि जब तक वैश्विक क्षेत्र में परिभाषित नहीं किया गया था। निम्नलिखित कोड में अपना कोड बदलना काम करेगा। मुझे विश्वास है कि यह वही है जो आप करने की कोशिश कर रहे हैं।

function updateTime(){ 
    var until = $("#time").html(); 
    $("#time").html(
     date("d", until) + " day(s)<br />" + 
     date("h", until) + " hour(s)<br />" + 
     date("i", until) + " minute(s)<br />" + 
     date("s", until) + " second(s)"); 
    } 
setInterval("updateTime()", 1000); 

या

function updateTime(until){ 
    $("#time").html(
     date("d", until) + " day(s)<br />" + 
     date("h", until) + " hour(s)<br />" + 
     date("i", until) + " minute(s)<br />" + 
     date("s", until) + " second(s)"); 
    } 
setInterval(function() { updateTime($("#time").html()) }, 1000); 

नोट: इस संभालने है कि परिवर्तन हर दूसरे तक; अन्यथा, मुझे यकीन नहीं है कि आप अंतराल क्यों करेंगे।

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