Fehler bei Größeninformationen von Bildern

mackattack

Mitglied
Moin,

ich habe mir gerade eine kleine JS Funktion geschrieben, die aber irgendwie komische Fehler hat.

Hier die Funktion:
PHP:
function Foto(img, bezeichnung){
  foto1= new Image();
  foto1.src=(img);

  src = "fotopopup.php?src="+img+"&bezeichnung="+bezeichnung;
  breite=foto1.width+0;
  hoehe=foto1.height+0;
  string="width="+breite+",height="+hoehe;
  alert(string);
  finestra=window.open(src,"",string);
}

Wenn ich diese Funktion nun aufrufe mit beispielsweise
Foto("Bilder/Bild1.jpg", "Bildname 1");
wird mir zuerst kurz per alert-Box der "string"-String ausgegeben.
Nun ist es so, dass manchmal "width=0,height=0" ausgegeben wird, manchmal aber auch alles korrekt abläuft.
Hat jemand eine Idee, woran das liegen könnte?

Gruß,
MackAttack

EDIT: Hatte ich ganz vergessen, zu erwähnen:
Selbst wenn er die Breite und Höhe mit 0 angibt, ist das Bild im neuen Fenster zu sehen, also liegt es nicht daran, dass ein falscher Pfad ausgegeben wird oder so.
 
Zuletzt bearbeitet:
Das Bild wird noch nicht fertiggeladen sein.... solange dies der Fall ist, ist auch dessen Grösse nicht bekannt.
Warte den onload-Event des Bildes ab, und ermittle dann seine Grösse.
 
Danke für die schnelle Antwort...
Ich habe mir gerade eben auch sowas gedacht und die Funktion ein wenig umgebaut...
Ich hab jetzt einen Intervall eingefügt, aber irgendwie funktioniert nun garnix mehr.
PHP:
function Foto(img, bezeichnung) {
  foto1= new Image();
  foto1.src=(img);
  Control(img, bezeichnung);
}

function Control(img, bezeichnung) {
  if((foto1.width!=0)&&(foto1.height!=0)){
    viewFoto(img, bezeichnung);
  }
  else{
    funktion="Control('"+img+"', '"+bezeichnung+"')";
    intervall=setTimeout(funktion,100);
  }	
}

function viewFoto(img, bezeichnung) {
  src = "fotopopup.php?src="+img+"&bezeichnung="+bezeichnung;
//  alert(src);
  breite=foto1.width+0;
  hoehe=foto1.height+0;
  string="width="+breite+",height="+hoehe;
  alert(string);
  finestra=window.open(src,"",string);
}
Ich bin nicht so das JS-Ass, vielleicht könntest du mir kurz sagen, wie ich den onLoad-Event nutzen kann.

Gruß
 
Oh ha... nun geht das doch mit der Control Funktion.
Ich hatte mich nur beim Aufruf verschrieben, kann jedem ma passieren ;)

Hab das oben schon geändert.

Dennoch vielen vielen Dank :)
 
So sollte es per onload gehen:
Code:
<script type="text/javascript">
<!--
function Foto(img, bezeichnung)
{
  foto1= new Image();
  foto1.src=(img);
  foto1.onload=function()
  {
    src = "fotopopup.php?src="+img+"&bezeichnung="+bezeichnung;
    breite=foto1.width+0;
    hoehe=foto1.height+0;
    string="width="+breite+",height="+hoehe;
    alert(string);
    finestra=window.open(src,"",string);
  }
}  
//-->
</script>
 
Danke :)...
empfehslt du denn eher meine Intervall Variante oder eher die mit onLoad?
Ich denke, on Load ist besser, da man ja auch bei einem 100ms Intervall nicht sicher sein kann, dass das Bild auch geladen ist. Sehe ich das richtig?
 
Ich stellte gerade bei einem Versuch fest, dass die deine Funktion auch noch einen Fehler hat... zumindest läuft sie nicht. Man muss bei der onLoad-Funktion die Pararmeter mit übergeben.
So:
PHP:
function Foto(img, bezeichnung)
{
  foto1= new Image();
  foto1.src=(img);
  foto1.onload=function(img, bezeichnung)
  {
    src = "fotopopup.php?src="+img+"&bezeichnung="+bezeichnung;
    breite=foto1.width+0;
    hoehe=foto1.height+0;
    string="width="+breite+",height="+hoehe;
    alert(string);
    finestra=window.open(src,"",string);
  }
}

Zumindest läuft es so und anders nicht ;)
 
Jo...onload ist besser.
Das Bild weiss ja selbst, wenn es geladen ist...also brauch man nicht ständig nachschauen.
Und wenn das Bild mal nicht geladen werden kann, schickst du den Browser mit setTimeout() in eine Endlosschleife, wodurch er im Zweifelsfall den Dienst verweigert.
 
Komisch...
Ich kriege jetzt in der anstatt dem Dateinamen ein "undefined"...
Hab "img" jetzt mal mit in der alert-Box ausgeben lassen...
Nehme ich die Pararmeter aus dem Funktionsaufruf wieder raus, kommt er erst garnicht bis zu alert-Box.
Haste da nochmal ne Idee parat ;) ?
 

Neue Beiträge

Zurück