-
Killin me - Javascript!
OK,
So it's been a while, but I've been really busy. So, I think I've got some of this Ajax stuff figured out, but I'm really stumpped right now, so I thought I would post this before I pull my hair out. Basically, I'm trying to disable a div element with a bunch of stuff in it after getting a sucessful ajax response. It seems to work if I write it like this:
Code:
var id = o.responseText;
if (document.getElementById('1').hasChildNodes())
{
while ( document.getElementById('1').childNodes.length >= 1 )
{
document.getElementById('1').removeChild( document.getElementById('1')s.firstChild );
}
}
But, you see my problem is having to pass a variable ID to the element, so I need a:
Code:
var div = "document.getElementById("+id+")";
... to pass the id back from the response. Now, simple, right? But when I write this code, nothing works:
Code:
var id = o.responseText;
var div = "document.getElementById("+id+")";
if (div.hasChildNodes())
{
while ( div.childNodes.length >= 1 )
{
div.removeChild(div.firstChild );
}
}
The error in firebug says that div.hasChildNodes() is not a function! Why isn't the string being passed????? AHGRRRHH!!!
Hacking away...
-
OK, Figured it out:
Instead of this:
Code:
var div = "document.getElementById("+id+")";
I needed to remove the quotes:
Code:
var cell = document.getElementById(id);
Javascript!!! Can be very frustrating - almost impossible to debug!
Thanks for listening...
-
Why wasnt I here sooner? I saw the prob in 5 seconds. Sorry!
PS. Try that in php! <g>
No language I know of lets you mix quotes like that without escaping them, and error 2 is, even if you did escape the inners, you are asking for a string containing +id+
A simple alert(div) should have produced an error. Course, you have to know what to look for.
div.hasChildNodes() is not a function!
Why isnt it a function? Probably because div doesnt exist.
Yeah JS is a bitch, and Firebug is the ****!
I takes a whule to believe this, but when you do you will be a master Javascrip Jedi as well as a master glow Jedi.
But keep in mind, strings are contained in matching pairs of quotes
so
var div = "document.getElementById("+id+")";
that makes div a string of the object you want.
Had you done div=eval(div); it would have worked, but your "ray of Light" was definately the correct way.
-
Jmarc,
Thanks for the reply. Yes, I didn't catch it because I was alerting the div var, but it came out as a string. Somehow, I thought I could include a string as part of a procedure... Wrong!
I'll have to look into eval() a bit more, but you're right - the obvious thing to do here is to do it right the first time.
What I'm finding is that in development, you really have to be fluent in 3 languages - php / SQL / javascript. Add in CSS notation and you've got a 4th, but CSS really makes things easier, not harder - anything not to have to go back to nested tables...
I've started messing around with the YUI connection manager for the AJAX requests thanks to your suggestion. There are so many out there, it's hard to say which one, but it's all about the same.
Chas
-
fluent in 3 languages ... and CSS ... you got it!
The reason I settled on the yahoo offering is, many of the other ones (like scriptaculous) have very large footprints. YUI is more modular. Plus they offer compressed Libs and even have a JAVA compressor. Development seems to be ongoing, Docs are great, and support in the forums is excellent.
When scriptaculous went to 300K for the lib and I started getting timeouts on my users I went to AJS. Not bad, but docs were scanty, few bugs, no support, and it was time to change yet again.