user3092778
user3092778

Reputation: 109

JavaScript - Uncaught ReferenceError: dis1 is not defined VM535:1 (anonymous function)

I keep getting the error:

Uncaught ReferenceError: dis1 is not defined VM535:1

(anonymous function) when I try to run the code below, however, I can't really pin-point the problem! It seems as if the function is in scope...

<script src="//code.jquery.com/jquery-1.10.2.min.js"></script>

<!DOCTYPE html>

<body onclick="whatareyousingingpatrick();">
<span id="money">50</span>$
<br>
<span style="background-color:#c3c3c3;width:1000px;height:25px;overflow:hidden;position:relative;display:block;" id="track"></span>
<br>
<span id="divthing" style="position:relative;display:block;"></span>


<script>
$(document).ready(function () {
    money = 50;
    mycars = {};

    function dodat() {
        var btn = document.createElement("div");
        btn.style.width = "25px";
        btn.style.height = "25px";
        btn.style.backgroundColor = "red";
        btn.style.boxShadow = "inset 0px 0px 0px 2px black";
        btn.style.position = "absolute";
        btn.style.left = "0px";
        btn.style.webkitTransition = "opacity 1s";
        var numba = Math.round(Math.random() * 50);
        btn.class = "haha";
        btn.id = numba;
        mycars[numba] = -50;

        var move = function () {
            mycars[numba] = mycars[numba] + 1;
            document.getElementById(numba).style.left = mycars[numba] + "px";
        };

        setInterval(move, 10);

        document.getElementById("track").appendChild(btn);
    }

    setInterval(dodat, 2000);

    function dis1() {
        $("shooter").css("background-color", "red");
        setTimeout('$("shooter").css("background-color", "blue");', '1000');
    compareEl = $("#shoot1");
        // Let's find the closest block!
        var otherEls = $('div'),
            compareTop = compareEl.offset().top,
            compareLeft = compareEl.offset().left,
            winningScore = Infinity,
            score, winner, curEl;

        otherEls.each(function () {
            // Calculate the score of this element
            curEl = $(this);
            score = Math.abs(curEl.offset().left - compareLeft);
            if (score < winningScore) {
                winningScore = score;
                winner = this;
            }
        });
        document.getElementById(winner.id).style.opacity="0";

        money = money+1;
        document.getElementById("money").innerHTML=""+money+"";
}

    function dis2() {
   compareEl2 = $("#shoot2");
        // Let's find the closest block!
        var otherEls2 = $('div'),
            compareTop2 = compareEl2.offset().top,
            compareLeft2 = compareEl2.offset().left,
            winningScore2 = Infinity,
            score2, winner2, curEl2;

        otherEls2.each(function () {
            // Calculate the score of this element
            curEl2 = $(this);
            score2 = Math.abs(curEl2.offset().left - compareLeft2);
            if (score2 < winningScore2) {
                winningScore2 = score;
                winner2 = this;
            }
        });

        document.getElementById(winner2.id).style.opacity="0";
}


    function dis3() {
   compareEl3 = $("#shoot3");
        // Let's find the closest block!
        var otherEls3 = $('div'),
            compareTop3 = compareEl3.offset().top,
            compareLeft3 = compareEl3.offset().left,
            winningScore3 = Infinity,
            score3, winner3, curEl3;

        otherEls3.each(function () {
            // Calculate the score of this element
            curEl3 = $(this);
            score3 = Math.abs(curEl3.offset().left - compareLeft3);
            if (score3 < winningScore3) {
                winningScore3 = score;
                winner3 = this;
            }
        });

        document.getElementById(winner3.id).style.opacity="0";
}


function dis4(){
   compareEl4 = $("#shoot4");
        // Let's find the closest block!
        var otherEls4 = $('div'),
            compareTop4 = compareEl4.offset().top,
            compareLeft4 = compareEl4.offset().left,
            winningScore4 = Infinity,
            score4, winner4, curEl4;

        otherEls4.each(function () {
            // Calculate the score of this element
            curEl4 = $(this);
            score4 = Math.abs(curEl4.offset().left - compareLeft4);
            if (score4 < winningScore4) {
                winningScore4 = score;
                winner4 = this;
            }
        });

        document.getElementById(winner4.id).style.opacity="0";
}
});

original = 0;
function whatareyousingingpatrick(){
if(money >= 50){
money = money-50;
original = original+1;
    setInterval("dis"+original+"();", 2500);
        var btn = document.createElement("shooter");
        btn.style.display = "block";
        btn.id = "shoot"+original+"";
        btn.style.height = "25px";
        btn.style.width = "25px";
        btn.style.backgroundColor = "blue";
        btn.style.borderRadius= "100%";
        btn.style.boxShadow= "0px 0px 0px 100px rgba(250, 250, 250, 0.7);";
        btn.style.position = "absolute";
        btn.style.left = event.pageX;
        btn.style.top = event.pageY;
        document.getElementById("divthing").appendChild(btn);
}
else{
alert("Sorry, this dude costs over 50 bucks.");
}
}
</script>

Upvotes: 0

Views: 4037

Answers (1)

Felix Kling
Felix Kling

Reputation: 816840

The disX functions are defined inside the ready callback, but setInterval evaluates the string in global scope. Either define the functions in global scope, or better, pass the function reference directly to setInterval.

Upvotes: 3

Related Questions