JavaScript prompt in function not saving value -
i have div that, when tapped, calls onclick function called door(). prompt comes up, , when user types prompt, goes away.
i made if statement saying: if variable (i) greater 3 (which happens when user clicks div again after typing prompt) alert user typed in prompt.
my problem comes when user re-clicks div. alert pops saying value of prompt says "undefined" instead of user entered. why?
here's code:
<!doctype html> <html> <head> <style> #mainwall{position: absolute; width: 98%; height: 98%; border: 3px solid brown; } #door{position: absolute; left: 49%; width: 5%; height: 10px; background: green; bottom: 1%;} #widthcorridor{position: absolute; width: 5%; height: 98%; left: 49%; background: red; bottom: 18px;} #maincorridor{position: absolute; width: 98%; height: 5%; left: 1%; background: red; bottom: 50%;} </style> </head> <body> <div id="mainwall"></div> <div id="maincorridor"></div> <div id="widthcorridor"></div> <div id="door" onclick="door()"></div> <script type="text/javascript"> var = 1; function door() { while (i == 1){ var door = prompt(); i++; } i++ if (i > 3) { alert(door); } } </script> </body> </html>
let's step through code.
the first time call door():
var = 1; was set globally, value of i 1 when door called
function door() { the variable door declared here due hoisting.
while (i == 1){ at point, while loop entered, because i has value of 1
var door = prompt(); the user can enter value, , long press "ok" string value returned. if press "cancel", null returned.
i++; the value of i becomes 2
} i++ the value of i becomes 3
if (i > 3) { as 3 not greater 3, if block skipped, , function ends. value of door scoped function dumped garbage collector.
alert(door); } } now second time call door()
function door() { the variable door declared here, again due hoisting. declaration brings value of undefined.
while (i == 1){ i retains value of 3 because it's in global scope, while loop never entered.
var door = prompt(); i++; } i++ the value of i becomes 4.
if (i > 3) { 4 greater 3 body of if statement entered.
alert(door); the value of door variable alerted. never initialized, retains value of undefined declaration.
} } the function ends , garbage collector collects door variable again.
Comments
Post a Comment