Ulli: OOP, onclick, DHTML

Hallo,

ich habe mir eine kleine Klasse geschrieben, mit hilfe derer ich ein Div an der Stelle des Klicks öffnen kann. Ich möchte nun, dass bei einem Klick außerhalb des neuen divs dieses sich wieder schließt. Ich habe im Archiv folgenden Lösungsvorschlag gefunden: "... ruf die schließen-Methode bei einem onclick im body tag auf ...". Soweit so gut - aber:
Ich habe also meine öffnen-Methode auf einem Bild, klicke dort um das div zu öffnen und beide onclick Attribute (Icon und body) werden aufgerufen -> kaum ist das div da, ist es auch schon wieder weg. Gibts da einen eleganteren Weg oder Ansatz, um dieses Problem zu lösen?

Code:

- Bild mit öffnen-Methode:
<img src="grafik/new.gif" alt="" title="" onclick="UIObj.createHelperDiv(this,'{$Links.management.new}','newDiv');" style="cursor:pointer">

- body

<body onclick="UIObj.closeAll();">

- die Klassendefinitionen über extra Datei eingebunden

  
function userInterface()  
{  
 this.boxes = new Array();  
  
 this.createHelperDiv = createHelperDiv;  
 this.closeAll = closeAll;  
}  
  
function createHelperDiv(objWhere,linkSRC,divName)  
{  
 if(!document.getElementById(divName)) {  
  var dynDiv = document.createElement("div");  
  dynDiv.id = divName;  
  dynDiv.style.position = "absolute";  
  //[...] Positionierung,Style usw.  
  
  var dynIFrame = document.createElement("iframe");  
  dynIFrame.id = divName + "IFrame";  
  dynIFrame.src = linkSRC;  
                //[..] Style usw.  
  
  dynDiv.appendChild(dynIFrame);  
  
  document.getElementsByTagName("body")[0].appendChild(dynDiv);  
  
  this.boxes.push(divName);  
 }  
 else {  
  document.getElementById(divName).style.visibility = "visible";  
 }  
}  
  
function closeAll()  
{  
 for(i = 0; i < this.boxes.length; i++) {  
  document.getElementById(this.boxes[i]).style.visibility = "hidden";  
 }  
}  

- und in der Hauptdatei die Erzeugung durch
  var UIObj = new userInterface();

Grüße, Ulli

  1. Ich habe also meine öffnen-Methode auf einem Bild, klicke dort um das div zu öffnen und beide onclick Attribute (Icon und body) werden aufgerufen -> kaum ist das div da, ist es auch schon wieder weg. Gibts da einen eleganteren Weg oder Ansatz, um dieses Problem zu lösen?

    Ja, du musst in deiner closeAll Funktion prüfen auf welchem Objekt der Klick stattgefunden hat und evtl. ob der Klick innerhalb der Position des Objektes das du anzeigen willst war.

    Struppi.

    1. Hallo,

      Ja, du musst in deiner closeAll Funktion prüfen auf welchem Objekt der Klick stattgefunden hat und evtl. ob der Klick innerhalb der Position des Objektes das du anzeigen willst war.

      Hmm ... this als Argument für closeAll scheint ja nichts zu bringen, da es ja immer das window-Objekt liefert. An was hattest du gedacht?

      Grüße, Ulli

      1. Ja, du musst in deiner closeAll Funktion prüfen auf welchem Objekt der Klick stattgefunden hat und evtl. ob der Klick innerhalb der Position des Objektes das du anzeigen willst war.
        Hmm ... this als Argument für closeAll scheint ja nichts zu bringen, da es ja immer das window-Objekt liefert. An was hattest du gedacht?

        Das Event Objekt.

        Struppi.

  2. Moin!

    Ich habe also meine öffnen-Methode auf einem Bild, klicke dort um das div zu öffnen und beide onclick Attribute (Icon und body) werden aufgerufen -> kaum ist das div da, ist es auch schon wieder weg. Gibts da einen eleganteren Weg oder Ansatz, um dieses Problem zu lösen?

    Deine Methoden müssen sich gegenseitig über eine globale Variable informieren, was passieren soll. Das onclick vom Bild setzt z.B. ein Flag, und das vom Bopy löscht das Flag, wenn es gesetzt ist - und wenn nicht, löscht es das DIV, weil dann vorher kein onclick von einem Bild kam.

    - Sven Rautenberg

    --
    My sssignature, my preciousssss!