# Wie kann ich eine Funktion bei onload / onresize nur einmal ausführen lassen ?



## Krischan (26. Mai 2013)

Hallo liebe Leute,
ich hab hier folgende Situation: Ich habe eine Seite mit einem iframe mit folgendem script:


```
<script language="javascript" type="text/javascript">
    function resize_me(n){
            d=40;
             ifObj=document.getElementsByName(n)[0];
             p=(document.all)?'scroll':'offset';
      eval("ifObj.style.height=Math.max(200,window.frames[n].document.getElementsByTagName('body')0]."+p+"Height+"+d+")+'px'");
                }
</script>
```
mit dem die Höhe des iframes an die geladene Seite angepasst wird.
Dazu auf den geladenden Seiten folgenden code:

```
<body onload = "parent.resize_me('iframe');">
<script language="javascript" type="text/javascript">
function Reload()
{
  parent.resize_me('iframe') ;  
}
window.onresize = Reload; 
    </script>
```
Das funktioniert meistens auch problemlos, nur bei einigen (wenigen) Fensterbreiten kommt es zu einer 'Endlosschleife' -> 
es wird ständig ein vertikaler Scrollbalken ein-/ausgeblendet, der iframe-Inhalt verspringt einige pixel nach oben / unten..
ein resize um wenige pixel beendet diese Schleife dann.
Daher meine Frage: (Wie) ist es möglich die Funktion bei jedem onload/onresize nur einmal ausführen zu lassen?

Schönen Sonntag - Gruß  Krishan


----------



## sheel (26. Mai 2013)

Setz doch eine Variable, ob es schon ausgeführt wurde


----------



## tombe (27. Mai 2013)

Wo wird dann der Inhalt der Variable überprüft, in der Funktion? Da bleibt es doch aber bei der Endlosschleife.

Was passiert wenn du nicht window.onresize sondern window.onload nimmst, dieses Ereignis sollte nur einmal ausgelöst werden.

Oder aber die Größe des IFrames mit Hilfe von CSS steuern.


----------



## Krischan (27. Mai 2013)

tombe hat gesagt.:


> Was passiert wenn du nicht window.onresize sondern window.onload nimmst, dieses Ereignis sollte nur einmal ausgelöst werden.


Ja super das klappt - beim Laden des iframes bei  'kritischer' Fensterbreite wird keine Endlosschleife mehr ausgelöst.
Mit folgender 'suboptimaler' Konstruktion:

```
<script language="javascript" type="text/javascript">
function Reload()
{
  parent.resize_me('iframe') ;  
  delay (100000000);
}

function Resize()
{
 document.location.reload(true) ;
  
}

window.onload = Reload;
window.onresize = Resize;
 </script>
```

funktioniert die Höhenanpassung auch bei einem _resize_ - vielleicht gibt es eine Möglichkeit _onresize _nur bei einem horizontalen_ resize_ auszuführen?


> Oder aber die Größe des IFrames mit Hilfe von CSS steuern.


Damit bin ich an einer browser-übergreifenden Lösung gescheitert ..

Vielen Dank   Gruss   Krishan


----------



## Krischan (28. Mai 2013)

Also mit folgendem script wird jetzt onresize nur bei horizontalem resize ausgeführt, so daß bei der vertikalen Höhenanpassung keine Endlosschleife mehr enstehen kann.

```
<script  language="javascript" type="text/javascript">
function Reload()
{
  parent.resize_me('iframe') ;  
  }
 window.onload = Reload; 

 width = $(window).width(); 
function Resize()
{
	if ($(window).width()!=width){
parent.resize_me('iframe') ; 
width = $(window).width();
}
 }
 window.onresize = Resize ;
</script>
```

Gruß   Krishan


----------

