Funktion in Html Tag ausführen

  • Themenstarter Themenstarter TobiNeu
  • Beginndatum Beginndatum
kann leider erst morgen früh testen, ich weiß nicht inwiefern sich ein javascript aufruf außerhalb eines html tags mit unserem parser verträgt (parameter)
aber könnt mir vorstellen dass das schon klappen könnte

Danke schonmal

Vorschläge in Richtung EventHandler , prototype (dom:load) etc sind wilkommen!
 
@timestamp: Was für ein Sinn steckt dahinter, auf die Variable run_function zuzugreifen? onLoad wird erst nach dem Laden des Skriptest ausgeführt, daher spielt run_function keine Rolle!
 
hey ich bins wieder ;)

ok ich mach das nun über den bodyload da geb ich der funktion gleich die Knoten-IDs des Pfades den ich öffnen will mit. sieht dann so aus:

Code:
<body onload="expandTree(%orgunit.key%,node1,node2,node3,..);">
...

function expandTree(orgKey,noce1,node2,node3,...){	
  getChilds(noce1);		
  getChilds(node2);					
  getChilds(node3);		
}

Die Funktion getChilds läd per Ajax in den für den Knoten vorhergesehen div Bereich die nächste Ebene inklusive den neuen div Tags für die darunter liegende Ebene (die kedoch noch nicht geladen wird).
Mein Problem ist nun das wenn ich das so lass das er nur die erste Ebene läd und nicht die folgenden. Mein Problem ist glaub ich das er die Funktion getChilds(node2) aufruft aber die div Felder noch nicht kennt.

Bau ich zwischen die ganzen getChilds(nodeX); ein alert ein funktionierts einwandfrei.

Jemand nen Lösungvorschlag ?
Wäre genial Danke

den ersten Parameter %orgunit.key% bitte vernachlässigen ;)
Vergessen den rauszunehmen

kurzgefasst: gibt es eine Möglichkeit eine Javascript Funktion erst dann auszuführen wenn der Browser den bisherige DOM komplett geladen hat?

ok
ich glaub ich habs
ich teste es noch kurz durch
wenn es voll funktioniert sag ich wie ichs gelöst hab ;)
 
Das Problem liegt wahrscheinlich beim AJAX. Ich hatte mal das gleiche Problem, denn du rufst den nächsten AJAX-Befehl auf, während der vorherige noch nicht beendet wurde.

Lösen kann man das, wenn man eine Variable anlegt, die genau dan auf true gesetzt wird, wenn der Befehl fertig ist (.onreadystatechange = function(){}) oder man läuft AJAX synchron laufen (der dritte Parameter bei open())
 
hi
also habs zum laufen gebracht, nun arbeite ich noch an der performance:
mein code bisher:

Code:
function expandTree(orgKey,nodes){	
  if (orgKey != null){				
    childsCount = countNodes(nodes);
    for (i=0;i<childsCount;i++){     
        setTimeout('getChilds('+ nodes[i] +')',300*i);     
    }
  }	
}

Nun würd ich gern anstatt der setTimeout Funktion die eine bestimmte Zeit wartet überprüfen ob der Server den aktuellen DOM geladen hat

Hab da an sowas gedacht:
document.addEventListener("DOMContentLoaded", getChilds(..), false);
funktioniert aber leider nicht.

oder muss ich in diese Richtung gehen?

Code:
  var  ajax_obj = new  XMLHttpRequest();  
   ajax_obj.onreadystate = function() {
      if(ajax_obj.readyState == 4) {
        getChilds(..);
      }
   };

Jemand ne Idee ?
 
Da die Elemente teilweise dynamisch nachgeladen werden hab ich mir gedacht

frag ich das so ab :

Code:
while (divnotfound) {
  if(document.getElementById(nodes[i]+'-subs'){  //überprüfung ob div feld schon nachgeladen wurde
    getChilds(nodes[i]);
    divnotfound = false;							
  }
}

geht leider auch nicht
 
Das mit dem onreadystatechage ist völlig richtig:
Javascript:
ajax.onreadystatechange = function()
{
  if (ajax.readyState==4) // Wenn fertig
  {
    deine_funktion();
  }
}
 
Hm mit onreadystate habe ichs irgendwie nicht hinbekommen, wurde irgendwie nie ein fertig geladen ausgelöst.

Nunja ich lass nun den Ajax.Updater mit asycnchron = false laufen , erfüllt auch seinen Sinn.

Danke nochmals für die Hilfe
 
Hey TOBINeu das wäre eine Funktion

LG Philip

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8" />

<title>Brutto-Netto</title>

<script type="text/javascript">

function BinN(Geld_id, Ergebnis_id) {

Geld=window.document.getElementById(Geld_id).value;

Ergebnis=Geld / 1.19 ;

window.document.getElementById(Ergebnis_id).value=Ergebnis;

}

function NinB(Geld_id, Ergebnis_id) {

Geld=window.document.getElementById(Geld_id).value;

Ergebnis=Geld * 1.19;

window.document.getElementById(Ergebnis_id).value=Ergebnis;

}

</script>

</head>

<body>

<input type="text" id="Geld"><br>

<button type="button" onClick="BinN('Geld', 'Ergebnis');">Brutto in Netto</button>

<button type="button" onClick="NinB('Geld', 'Ergebnis')">Netto in Brutto</button><br>

<input type="text" id="Ergebnis" readonly="readonly">

</body>

</html>
 
Minimal Überarbeitet
<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8" />

<title>Brutto-Netto</title>

<script type="text/javascript">

function BinN(Geld_id, Ergebnis_id) {

Geld=window.document.getElementById(Geld_id).value;

Ergebnis=Math.round(Geld / 1.19 * 100) / 100 ;

window.document.getElementById(Ergebnis_id).value=Ergebnis;

}

function NinB(Geld_id, Ergebnis_id) {

Geld=window.document.getElementById(Geld_id).value;

Ergebnis=Math.round(Geld * 1.19 * 100) / 100;

window.document.getElementById(Ergebnis_id).value=Ergebnis;

}

</script>

</head>

<body>

<input type="text" id="Geld"><br>

<button type="button" onClick="BinN('Geld', 'Ergebnis');">Brutto in Netto</button>

<button type="button" onClick="NinB('Geld', 'Ergebnis')">Netto in Brutto</button><br>

<input type="text" id="Ergebnis" readonly="readonly">

</body>

</html>
 
Zurück