+ 1
JS how can I {do something} when an element or variable is is defined.[SOLVED]
Do something when an element becomes defined. In this code, x is not defined to start with, but after a second, it will be created and defined. I want to do something when it becomes defined or exists. https://code.sololearn.com/WoO62sIY0YCN/?ref=app
13 Answers
+ 6
Ginfio I've got a solution for you in this code.
https://code.sololearn.com/WDMIm09AYBWB/
However, be sure to read the message I left you in the HTML comments.
I also left you a list of questions to challenge you a bit further. No worries if you don't respond. 😉
+ 4
Ginfio you should not redefine x in setTimeout, it would make x as local variable in the timeout function only, which is different from x defined in global scope.
To keep checking the x variable, you could implement setInterval function, rather than just calling x directly.
+ 4
Ginfio you cannot access local variable of other function, if you really can to protect the x variable from being accessed globally, you could make a function to include all the setTimeout, setInterval callback, including x variable there.
https://code.sololearn.com/W5l6S2d9FAtw/?ref=app
+ 3
Calviղ I meant to only define x in the timeout_
So, how would I check when x is defined using setInterval()
setInterval(function(){
check when x exists / is defined
}, 100)
And when it does exist, or if it exists (defined) {do somethin}
set
+ 2
Ginfio To check for existence of defined variable, you should use typeof
Eg.
if(typeof x !== "undefined")
it would return false if x is not exist, rather than runtime error.
The typeof operator returns a string indicating the type of the unevaluated operand.
Reference:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof
+ 2
Calviղ I coud use that if(typeof x !== “undefined”)
But that’s gonna return false, because x is not defined to start with.
I’m wondering if there is a way to check every certain time.
like..
setInterval(funcion(){
check if x exisits.
},100)
every 100ms it would check for x’s existance until it does exist.
And wen it does exist_ do somethn
+ 2
Ginfio it's variable scoping issue in your code.
'x' variable which is defined inside setTimeout() function is in local scope. It can't be accessible to outer scope.
And that's why error showing -
'x' is not defined.
Solution to working code -
1) define 'x' variable global (outof the function).
2) put your if block inside setTimeout function.
reference:
https://hackernoon.com/why-you-shouldnt-use-var-anymore-f109a58b9b70
+ 1
I found this on stack overflow, but it won’t work on my code_
function waitForElement(){
if(typeof someVariable !== "undefined"){
//variable exists, do what you want
console.log("738")
}
else{
setTimeout(waitForElement, 250);
}
}//
0
Well you are already doing something when it is define ,so I Don't understand do you want to do something when it is not defined ?
0
Yup you are already printing something ,when it is defined but again it becomes undefined as setTimeOut function finishes
0
Abhay hmm_
Let’s look at it like this:
I removed the x.innerHTML = “...” from the setTimeout()
now x.innerHTML is unset / nothing.
there is a delay (timeout, 1000) before x will be defined. Until that 1 second (1000ms), x will be undefined.
Once that 1 second is passed, it WILL be defined.
Now, can I run a test to check if x is defined.
Like maybe, every 100 seconds check if x is defined.
100ms: x = undefined (no exist)
200ms: x = undefined (no exist)
....
900ms: x is still undefined
1000ms, now it’s defined (does exit)
When it is defined, exists, do something_
0
David Carroll I looked at the questions, and I was gonna write down the answers, but I thought z answers might just be long and bzazzz
So, i thought I might just tell you the ones that I don’t understand:
4 && 5
4: “Why would this scenario for conditional behavior based on the existence of a variable not be possible in a strongly typed and/or compiled environment?”
umm, maybe because the variable might get mixed with other variables, or umm_..
5: I’ m not sure why this would be a bad design to follow, I mean... IF this is a bad design to follow, does that mean there’s a better design,
Or is it lole _ just don’t follow this design?
- 3
Thats good