Forum Moderators: open

Message Too Old, No Replies

onload event and large files

giving me errors

         

moltar

6:26 pm on Jan 4, 2006 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



I have a page that loads 6 JS files. It's an internal app, so it's not a problem. In one of the files I use an onload event to get the IDs of some of the form fields and then do something with it.

addLoadEvent(set_search_events); 

function set_search_events() {
fname = getElem('fname');
fnameo = fname.value;
}

Note: addLoadEvent and getElem are a part of a lib.js [v2studio.com].

Sometimes when I open the page for the first time or do a hard refresh I get an error:

fname.value is null or not an object

If I do a soft refresh, then the error does not come up. I think this happens because HTML does not load fast enough, but JS has already loaded. And JS cannot find that part of the form. I get that error in both IE and FF.

What can I do to prevent that from happening?

DrDoc

6:45 pm on Jan 4, 2006 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



What does
alert(getElem('fname'));
return?
And, is the function triggered by some form of body onload event?

moltar

7:00 pm on Jan 4, 2006 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



Ok, I tried this:

function set_search_events() {  
alert(getElem('fname'));
fname = getElem('fname');
fnameo = fname.value;
}

And it alerts

[object]
.

Yes, it is an onload event. addLoadEvent is basically a cross browser window.onload function. Here is the code:

function addLoadEvent(fn) {

var w = getEventModel()=="DOM" &&!window.addEventListener? document : window;
return addEvent(w, 'load', fn, true)
}

function addEvent(els, ev, fn, capture) {
if (!ALLOW_LEGACY_EVENTS && getEventModel()=='legacy') return false;
if (undef(capture)) capture = true;
function DOM_addEvent (el, ev, fn, capture) { el.addEventListener(ev, fn, capture) }
function legacy_addEvent(el, ev, fn) {
var evn = 'on'+ev;
if (!el[evn] ¦¦ undef(el[evn].handlers)) {
el[evn] = function() {
map(el[evn].handlers, function(h){ h( new (el.attachEvent?IE_Event:Legacy_Event)(el) ) });
}
el[evn].handlers = [];
}
el[evn].handlers.push(fn);
}
var addEventFn = getEventModel()=='DOM'? DOM_addEvent : legacy_addEvent;
map(getElemList(els), function(el) { addEventFn(el, ev, fn, capture) });
}

See lib.js for more...