user1883633
user1883633

Reputation: 19

Issues with JavaScript settimeout function

I am very new to JavaScript and cannot seem to get the setTimeout command to do anything. I know this has been asked many times before, but I have spent the last two hours looking at all previous cases of it and it still isn't working for me. Here is what I have got at the moment:

<html>
    <script type="text/javascript">

    var i = 0;
    function aloop() {
        document.write(i);
        i++;
    }

    function afunction() {
        if (i <= 12) {
            setTimeout(aloop(), 1000);
            afunction();
        }
    }

    </script>

    <form>
    <input type=submit value="Click me!" onClick="afunction()">
</html>

Can anyone tell me what I should do to make this work?

Upvotes: 1

Views: 137

Answers (3)

I Hate Lazy
I Hate Lazy

Reputation: 48761

You didn't describe what doesn't work, but I'll assume you want the i to be written in 1000 millisecond intervals.

Do this:

<html>
 <!-- you're missing your head tags -->

<head>
    <title> my page </title>

    <script type="text/javascript">
    var i=0;
    function aloop() {
          // don't use document.write after the DOM is loaded
        document.body.innerHTML = i;
        i++;
        afunction(); // do the next call here
    }
    function afunction() {
        if (i<=12) {
                 //     v---pass the function, don't call
            setTimeout(aloop,1000);

      //    afunction();  // remove this because it'll call it immediately
        }
    }
    </script>
</head>

<!-- you're missing your body tags -->
<body>
    <form>
        <input type=submit value="Click me!" onClick="afunction()">
    </form> <!-- you're missing your closing form tag --> 
</body>
</html>

Upvotes: 1

Eli Gassert
Eli Gassert

Reputation: 9763

The problem is you're calling your function instead of queuing your function.

setTimeout(aloop, 1000) NOT setTimeout(aloop(), 1000);

Upvotes: 1

Quentin
Quentin

Reputation: 943124

Pass a function to setTimeout, not the return value of a function call.

setTimeout(aloop,1000);

Upvotes: 4

Related Questions