PDA

Pogčedajte punu verziju : Problem sa koristenjem vise onload funkcija


Ministar
11. 09. 2006., 14:36
Imam par problema, kako da koristim vise onload funkcija naime imam prvi slucaj:


<script type="text/javascript">
var liveSearch;
window.onload = function() {
liveSearch = new LiveSearch('StaTrazim','PrikazRezultata','Indikato r');
}
</script>


i drugi slucaj



<body onload="AutoVijesti()">


U drugom slucaju automatski mi se mjenja par vijesti iz baze a u prvom mi tako treba za live search.

U ovom slucaju kada su obadva tu, ne radi mi mjenjanje vijesti, a live serach radi, kada iz live search iscupam onload kod, tada sve radi ok ali pretraga jok.

Jel postoji neki nacin da ih odvojim tj da ne smetaju jedna drugoj.

jablan
11. 09. 2006., 14:48
Pogledaj http://www.quirksmode.org/js/events_advanced.html

noviKorisnik
11. 09. 2006., 15:23
U praksi, nešto poput ...

regEvent = function (element, event, handler, capture) {
if (element.addEventListener) {
element.addEventListener (event, handler, capture);
} else if (element.attachEvent) {
element.attachEvent ('on' + event, handler);
} else {
//ništa
}
}
regEvent (window, 'load', AutoVijesti, false);
regEvent (window, 'load', function () {liveSearch = new LiveSearch ('StaTrazim','PrikazRezultata','Indikator');}, false);

ivanhoe
11. 09. 2006., 15:44
postoji i varijanta koju je napisao Simon Willson (incutio.com) :
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
if (oldonload) {
oldonload();
}
func();
}
}
}

addLoadEvent(nameOfSomeFunctionToRunOnPageLoad);

ja sam ovo dosta koristio i lepo radi cak i na starijim browserima, medjutim prosle godine se pokrenula prica oko memory leakova vezanih za javascript closures, a posto je ovo upravo to, moguce da moze da zezne memoriju... ne znam nisam probao, a i nikad mi se niko nije zalio do sad, ali...

bluesman
11. 09. 2006., 15:54
A sto ne bi napisao jednu tvoju funkciju koju pozivas onload a u njoj pozivas sve koje tra da se pozovu. Na primer:

<body onload="mojonload()">

<script>
function mojonload()
{
loadmenu();
loadstuff();
...
}
</script>

jablan
11. 09. 2006., 16:28
A sto ne bi napisao jednu tvoju funkciju koju pozivas onload a u njoj pozivas sve koje tra da se pozovu.
Fora je u tome da, kadgod hoće da doda neki modul koji ima svoju onload logiku, mora da menja tu zajedničku funkciju. Ovako, svaki modul registruje svoj onload handler za sebe. Manje koda, manja mogućnost greške, itd...

Ministar
12. 09. 2006., 10:36
U praksi, nešto poput ...

regEvent = function (element, event, handler, capture) {
if (element.addEventListener) {
element.addEventListener (event, handler, capture);
} else if (element.attachEvent) {
element.attachEvent ('on' + event, handler);
} else {
//ništa
}
}
regEvent (window, 'load', AutoVijesti, false);
regEvent (window, 'load', function () {liveSearch = new LiveSearch ('StaTrazim','PrikazRezultata','Indikator');}, false);

Ovaj primjer savrseno radi, Hvala ti puno covjece.
Uvjek ima sitnica koje covjeku znaju zagorcat zivot.
Hvala i vama ostalima koji ste mi pomogli. Pozdrav do slijedeceg puta :)

krcko
30. 09. 2006., 23:10
postoji i varijanta koju je napisao Simon Willson (incutio.com)

ja koristim varijantu ovog koda:

var nullFunction = function(){};

addOnLoad = function(func)
{
if (typeof(func) != "function") return;

var prevOnLoad = nullFunction;

if (typeof(window.onload) == "function")
{
prevOnLoad = window.onload;
}

window.onload = function()
{
prevOnLoad();
func();
};
};

i onda u ostalim fajlovima koristim:

addOnLoad(function()
{
// neki kod
});