Skiddo: Problem mit .onClick

Hi!

Ich hab ein kleines Problem mit meiner .onClick Funktion.

Sie soll ein div an der Mausposition öffnen (style.visibility = "visible") und es wieder verstecken (.. = "hidden") wenn mit der Maus irgendwo in das Document geklickt wird.

So hab ichs mir vorgstellt (die Mausposition habe ich schon geklärt):

  
  
	function mapClick(Ereignis)  
	{  
	  if (!Ereignis)  
   	    Ereignis = window.event;  
  
	  if (Ereignis.button == 2)  
	  {  
	    document.getElementById('dropdownmenu').style.visibility = "visible";  
	    document.onClick =  closeDropDownMenu();  
	  }  
	}  
  
      function closeDropDownMenu()  
      {  
	document.getElementById('dropdownmenu').style.visibility = "hidden";  
        document.onClick = null;  
      }  

Klappt aber nicht. So wird noch nichtmal das <div> gezeigt. Mein großes Problem liegt darin, wie man den Klick auf das document auswertet.

Vielleicht seht ihr einen dummen Fehler o.ä. und könnt mir helfen.

Danke, Skiddo.

  1. Grüße,
    frage 1:
    -was ist "document" eigentlich "auf der Seite"?
    frage 2
    -hast du irgendein developertool - zB den in Opera eingebauten Firefly genutzt um zu sehen was du eigentlich anclickst?
    -frage 3
    vergleiche mal deins mit dem Beispiel von slefhtml (drag&drap) - merkst du unterschiede?
    MFG
    bleicher

    --
    __________________________-

    FirefoxMyth
    1. -was ist "document" eigentlich "auf der Seite"?

      Ich weiß nicht genau was du damit meinst. Aber ich mit document meine ich irgendwo im Fenster, ganz egal wo. Denn dann soll das <div> wieder versteckt werden.

      -hast du irgendein developertool - zB den in Opera eingebauten Firefly genutzt um zu sehen was du eigentlich anclickst?

      Die Funktion wird in einem <area> über den onClick-Eventhandler aufgerufen.
      Ich benutze Firebug. Ein Aufruf der Funktion über die Konsole bringt auch nichts.

      vergleiche mal deins mit dem Beispiel von slefhtml (drag&drap) - merkst du unterschiede?

      Habe a) kein solches Beispiel bei selfHTML gefunden und b) sehe ich keine Verbindung zwischen Drag&Drop und meinem Problem.

      Danke für die Hilfe, Skiddo.

  2. Hi,

    document.onClick =  closeDropDownMenu();

    onClick != onclick

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. Hi,

      onClick != onclick

      Und welches davon muss ich benutzen? Wenn ich rumprobiere klappt nix.

      So wird das div jetzt wenigstens angezeigt:

      	function mapClick(Ereignis)  
      	{  
      	  if (!Ereignis)  
         	    Ereignis = window.event;  
        
      	  if (Ereignis.button == 2)  
      	  {  
      	    document.getElementById('dropdownmenu').style.visibility = "visible";  
      	    document.onClick = closeDropDownMenu;  
      	  }  
      	}  
        
            function closeDropDownMenu()  
            {  
      	document.getElementById('dropdownmenu').style.visibility = "hidden";  
              document.onClick = null;  
            }  
      
      

      Wenn ich in der Firebug Konsole
      »» document.getElementById('dropdownmenu').style.visibility = "hidden";
      eingebe, wird das auch ausgeführt.
      Gebe ich

      closeDropDownMenu()

      ein, passiert garnichts.

      Wo ist mein Fehler?

      Gruß, Skiddo

      1. onClick != onclick

        Und welches davon muss ich benutzen?

        Nachdem du diesen Tip bekommst, würde ich auf das tippen, das du bisher *nicht* benutzt hast ;-)

      2. Mahlzeit Skiddo,

        onClick != onclick

        Und welches davon muss ich benutzen?

        Sinnvollerweise <http://de.selfhtml.org/javascript/sprache/eventhandler.htm#onclick@title=das Existierende>.

        Wenn ich rumprobiere klappt nix.

        Planlos irgendwas ausprobieren klappt in den seltensten Fällen ...

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. Tag

          Sinnvollerweise <http://de.selfhtml.org/javascript/sprache/eventhandler.htm#onclick@title=das Existierende>.

          Wenn ich das hier verwende:
          <area shape="poly" coords=".." onclick="mapClick();">
          Funktioniert garnichts.

          Mit
          <area shape="poly" coords=".." onClick="mapClick();">
          auch nichts.

          Nur mit
          <area shape="poly" coords=".." onMouseUp="mapClick();">
          wird
          document.getElementById('dropdownmenu').style.visibility = "visible";
          ausgeführt, die zweite Zeile der Funktion scheinbar nicht.

          Das meinte ich mit rumprobieren (Variationen austesten).

          Generell liegt der Fehler allerdings nicht bei der Groß- und Kleinschriebung, sondern hier:
          document.OnMouseUp = closeDropDownMenu;
          Oder hier:

            function closeDropDownMenu()  
            {  
              document.getElementById('dropdownmenu').style.visibility = "hidden";  
              document.OnMouseUp = null;  
            }
          

          Danke, Skiddo

          1. Hi,

            Generell liegt der Fehler allerdings nicht bei der Groß- und Kleinschriebung, sondern hier:
            document.OnMouseUp = closeDropDownMenu;

            Doch, wenn du die Eventhandler nicht als Attribute im HTML notierst, sondern per JavaScript zuweist, dann liegt hier ein Fehler - und zwar in der Groß-/Kleinschreibung.

            MfG ChrisB

            --
            Light travels faster than sound - that's why most people appear bright until you hear them speak.
            1. Tag

              Doch, wenn du die Eventhandler nicht als Attribute im HTML notierst, sondern per JavaScript zuweist, dann liegt hier ein Fehler - und zwar in der Groß-/Kleinschreibung.

              Aber mit
              OnMouseUp = closedropdownmenu;
              wird wenigstens das <div> eingeblendet, wenn ich da
              onmouseup = closedropdownmenu;
              benutze, wird kein Teil der Funktion aufgerufen.

              1. Hallo,

                Doch, wenn du die Eventhandler nicht als Attribute im HTML notierst, sondern per JavaScript zuweist, dann liegt hier ein Fehler - und zwar in der Groß-/Kleinschreibung.

                Aber mit
                OnMouseUp = closedropdownmenu;
                wird wenigstens das <div> eingeblendet, wenn ich da
                onmouseup = closedropdownmenu;
                benutze, wird kein Teil der Funktion aufgerufen.

                *tiefdurchschnauf*

                Ja, nun sei bitte so gut und begreif es: Javascript-Bezeichner sind case-sensitive! Die Bezeichnungen der Eventhandler werden nun einmal klein geschrieben, weil sie so definiert sind. Und zwar durchgehend.

                Natürlich kannst du einem Element eine Eigenschaft geben, die es vorher noch nicht hatte:

                element.onClick = function() { alert("Ätsch!"); };

                Aber erwarte nicht, dass diese Funktion bei einem Klick auf das Element auch aufgerufen würde, denn die dafür zuständige Eigenschaft heißt onclick und nicht onClick.

                Deine eigenen Funktionen darfst du natürlich schreiben wie du willst. Aber wenn du einmal closeDropDownMenu definiert hast, dann hast du dich damit auf eine Schreibweise festgelegt. Wenn du dann an anderer Stelle plötzlich closedropdownmenu referenzierst, wird das Script einen Fehler melden, weil closedropdownmenu nicht definiert ist, und wird abgebrochen.

                Klar?

                So long,
                 Martin

                --
                F: Was ist ekliger als ein angebissener Apfel mit einem Wurm drin?
                A: Ein angebissener Apfel mit einem halben Wurm.
  3. document.onClick =  closeDropDownMenu();

    1. onClick ist falsch, das weißte du schon
    2. Du willst hier die Funktion nicht aufrufen, sondern erst onclick soll die Funktion aufgerufen werden. Also darfst du hier nur die Referenz zuweisen.

    document.onclick = closeDropDownMenu;

    Struppi.

    1. Tag,

      document.onclick = closeDropDownMenu;

      Hilft auch nicht weiter.
      Eine möglichkeit wäre, das wenn ich anstatt auf das "document" auf einen <div> drücke,

      document.onclick = closeDropDownMenu;

      Nicht die closeDropDownMenu Funktion aufruft. Ist das so? Denn mein gesamtes Dokument ist Flächendeckend mit <div>s gefüllt (Bitte keine Diskussionen über die sinnhaftigkeit davon, ich weiß was ich tue).

      Dann wäre eine Möglichkeit, ein <div> einzublenden, das das gesamte Dokument ausfüllt und auf einen Klick darauf das "Menu" <div> auszublenden. Allerdings würden dann einige Mouseover Effekte, die ich brauche nicht mehr funktionieren.

      Gruß, Skiddo