Trouble using setTimeout/setInterval

W

Weston C

In the course of trying to build a simple clock, I've run into a problem
using the setInterval (and setTimeout) function.

http://weston.canncentral.org/misc/tkeep/tkeep.html
http://weston.canncentral.org/misc/tkeep/tkeep.jss

function fieldToClock(fieldId)
{
var field = document.getElementById(fieldId);
alert("Starting a clock in text field " + fieldId + "(" + field
+ ")");
codeSnippet = "clockUpdate(" + fieldId + ")";
setInterval(clockUpdate(fieldId),1000);
//setInterval(codeSnippet,1000);
//setInterval("eval(\"" + codeSnippet + "\")",1000);
}

function clockUpdate(fieldId)
{
field = document.getElementById(fieldId);
field.value = date2timestr(new Date());
}

The problem line is the setInterval line, and it seems to have something
to do with the fact I want to pass the function clockUpdate an argument
(I don't want to specify a single text element to be associated with the
display of the clock. Ideally, I'd like to be able to call the function
"fieldToClock" with the id of any text field in the document and turn it
into a clock).

The two commented out lines are other approaches I've applied. The first
approach yields the error:

Error: useless setInterval call (missing quotes around argument?)
Source File: http://weston.canncentral.org/misc/tkeep/tkeep.jss
Line: 6

The second/third approach yeild:

Error: clock_STF is not defined
Source File: http://weston.canncentral.org/misc/tkeep/tkeep.jss
Line: 7

Except this error is repeated every 1000 seconds. :)

Any ideas?

Thanks,

Weston
 
L

Lasse Reichstein Nielsen

Weston C said:
In the course of trying to build a simple clock, I've run into a problem
using the setInterval (and setTimeout) function.
var field = document.getElementById(fieldId);
codeSnippet = "clockUpdate(" + fieldId + ")";

So, fieldId is a string. Say it is the string "foobar". Then your
codeSnippet becomes the string
"clockUpdate(foobar)"
Here, foobar is not a string, but a variable name, because the quotes
are missing. Try:
codeSnippet = "clockUpdate(\""+fieldId+"\");";
setInterval(clockUpdate(fieldId),1000);

Here, you call the clockUpdate function right now, and try evaluating
the result of that in one second. Try:
setInterval(function(){clockUpdate(fieldId);},1000);
or use the above codeSnippet with:
//setInterval(codeSnippet,1000);
//setInterval("eval(\"" + codeSnippet + "\")",1000);

Don't use eval. Don't ever use eval (the exceptions are so rare that
you'll probably never hit them).


The two commented out lines are other approaches I've applied. The first
approach yields the error:

Error: useless setInterval call (missing quotes around argument?)
Source File: http://weston.canncentral.org/misc/tkeep/tkeep.jss
Line: 6

Yes, the return value of clockUpdate is undefined. It is useless to
delay "undefined" for one second.
The second/third approach yeild:

Error: clock_STF is not defined
Source File: http://weston.canncentral.org/misc/tkeep/tkeep.jss
Line: 7

Ah, the content of your string is "clock_STF". As I said above, it
is now seen without its quotes, as a variable, and there is no
variable defined by that name.

/l
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,999
Messages
2,570,246
Members
46,840
Latest member
BrendanG78

Latest Threads

Top