Zdarzenie onload

w dziale Opera
daroc napisał(a):

Czy mi się wydaje, czy w Operze nie ma obsługi zdarzenia onload dla obrazków? Mam problem w wersji 7.50. Dodam, że onerror działa.

d.i.z. napisał(a):

U mnie działa.

lockoom napisał(a):

Działa.

daroc napisał(a):

Ano rzeczywiście, działa... nawet dla obrazków utworzonych w JS działa...

Tylko dlaczego nie działają mi te funkcje:

function loadFile() {
  loading_file=new Image();
  loading_file.src='http://free.of.pl/d/daroc/graphic/menu_top.gif';
  loading_file.onload=loaded;
  loading_file.onerror=notLoaded;
};
function loaded() {
  alert('OK');
};
function notLoaded() {
  alert('BADFILE');
};
onload=loadFile;

Po prostu nic się nie dzieje...
Dodam, że pod IE i Mozillą działa...

lockoom napisał(a):

Musisz mieć błąd gdzie indziej, bo u mnie ten kod działa na Operze 7.23 i 7.51.

daroc napisał(a):

Ja używam O7.50 i jeszcze raz sprawdziłem... skopiowałem ten kod do notatnika i jedynie objąłem go znacznikiem <script> i nie działa... Tzn. włączam i nic się nie dzieje (JS mam włączone ;]).

d.i.z. napisał(a):

Może tak:
loading_file.onload=loaded();
loading_file.onerror=notLoaded();

daroc napisał(a):

Originally posted by d.i.z.
Może tak:
loading_file.onload=loaded();
loading_file.onerror=notLoaded();


AFAIK w takich sytuacjach robi się po prostu funkcja; (bez nawiasów), nie pamietam już dlaczego, ale kiedyś tak czytałem na grupach o JS.

Ale jeśli nawet tak zrobię, to:
W Operze: pojawia się komunikat OK, a po nim BADFILE (czyli sprzeczność).
W IE: pojawia się komunikat OK, a później błąd JS: "nie zaimplementowano".

UPDATE:
Gdy zrobiłem loadFile(), zamiast onload=loadFile(), to działa... Sam nie wiem... raz ta funkcja działa, raz nie... confused

lockoom napisał(a):

Tak jak pisze d.i.z. jest na pewno źle, bo wtedy wykona te funkcji i ich wynik spróbuje przypisać do zdarzeń onload i onerror. Brak nawiasów mówi o tym, że przypisujemy funkcje, a nie jej wynik.

BTW: Znalazłem źródło problemu smile Opera generuje zdarzenie onload tylko dla obrazków pobranych z serwera, a nie a cache'u. Wydaje mi sie, że to błąd. Można temu zaradzić dodając do obrazka jakiś query string:
[PHP]function loadFile() {
loading_file=new Image();
loading_file.src='http://free.of.pl/d/daroc/graphic/menu_top.gif?%27+Date();
loading_file.onload=loaded;
loading_file.onerror=notLoaded;
}
function loaded(){
alert('OK');
}
function notLoaded() {
alert('BADFILE');
}
onload=loadFile;[/PHP]

Nie radziłbym tego stosować przy obrazkach, które miałyby być ładowane często albo są bardzo duże, bo można w ten sposób bardzo szybko zapełnić klientowi cache.
BTW2: Po co się tak rozpisywać:
[PHP]function loadFile() {
loading_file=new Image();
loading_file.src='http://free.of.pl/d/daroc/graphic/menu_top.gif?%27+Date();
loading_file.onload=function(){alert('OK')};
loading_file.onerror=function(){alert('BADFILE')};
}
onload=loadFile;[/PHP]