Achim: getElementById - Problem

  
   		function js_hide(elementid) {  
   			  
   			var el = document.getElementById(elementid);  
   			el.style.display = 'none';  
   			  
   		}  
   		   		  
   		function js_show(elementid) {  
   			  
   			var el = document.getElementById(elementid);  
   			el.style.display = '';  
   			  
   		}  
   		  
   		  
   		function init_venue(eventid) {  
   			  
   			if (eventid>0) {  
   				js_hide("el_newvenue");  
   				js_show("el_choosevenue");  
   			} else {  
   				js_show("el_newvenue");  
   				js_hide("el_choosevenue");  
				elSelectVenue(0,'No Venue');   			  
   			}  
   			  
   		}  
   	  
   		window.addEventListener("ondomready", init_venue('0'), false);  

Ich habe das Problem mit der Funktion js_hide und js_show. Wenn ich den Namen des Elements per Variable übergebe ist die Variable el null. Wenn ich den Namen des Elements per Hand eintrage geht es !?

Was mache ich falsch ? Die Elemente gibt's natürlich ..

Gruss

  1. Hellihello

    wie gibst Du per Hand ein, wie übergibst Du per Variable?

    Dank und Gruß,

    frankx

    --
    tryin to multitain  - Globus = Planet != Welt
    1. Lieber frankx,

      wie gibst Du per Hand ein, wie übergibst Du per Variable?

      ... und in welchem "Browser" testest Du? Und unter welcher URL kann man sich das einmal anschauen?
      Und hier die Tipps für Fragende.

      Liebe Grüße,

      Felix Riesterer.

      --
      ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
      1. Liebe Grüße,

        Felix Riesterer.

        Der Browser ist Firefox mit Firebug ... eine Url hab ich im Moment nicht. Es ist auch nur der Codeschnipsel. Die beiden Elemente sind normale Div Container die ich verstecken und anzeigen möchte.

        Habe das auch schon oft gemacht aber keine Ahnung warum der mosert ..
        Gruss

        1. Hallo Felix,
          das liegt daran, dass die Objekte noch nicht geladen sind, wenn du das Skript aufrufst.
          onLoad im Body-Tag wird das Problem lösen.

          Gruss
          Dagobert

          »» Liebe Grüße,
          »»
          »» Felix Riesterer.

          Der Browser ist Firefox mit Firebug ... eine Url hab ich im Moment nicht. Es ist auch nur der Codeschnipsel. Die beiden Elemente sind normale Div Container die ich verstecken und anzeigen möchte.

          Habe das auch schon oft gemacht aber keine Ahnung warum der mosert ..
          Gruss

          1. Hellihello

            Hallo Felix,
            das liegt daran, dass die Objekte noch nicht geladen sind, wenn du das Skript aufrufst.
            onLoad im Body-Tag wird das Problem lösen.

            Aber Buttons die die Funktionen bedienen sollten doch dennoch funktionieren, wenn die ID korrekt übergeben wird.

            Dank und Gruß,

            frankx

            --
            tryin to multitain  - Globus = Planet != Welt
            1. Hallo,
              richtig, aber das hat er ja nicht ausprobiert. Er hat einfach die elementid händisch in die Funktion übertragen. Das ändert nichts an der Problematik.

              Gruss
              Dagobert

              Hellihello

              »» Hallo Felix,
              »» das liegt daran, dass die Objekte noch nicht geladen sind, wenn du das Skript aufrufst.
              »» onLoad im Body-Tag wird das Problem lösen.

              Aber Buttons die die Funktionen bedienen sollten doch dennoch funktionieren, wenn die ID korrekt übergeben wird.

              Dank und Gruß,

              frankx

          2. das liegt daran, dass die Objekte noch nicht geladen sind, wenn du das Skript aufrufst.
            onLoad im Body-Tag wird das Problem lösen.

            Hast du den Code des OPs überhaupt versucht zu verstehen?!

            Mathias

            1. window.addEventListener("ondomready", init_venue('0'), false);

              Es liegt doch auf der Hand, was er damit erreichen wollte. Gerade deshalb, _WEIL_ es den Event "ondomready" nicht gibt.

              Täusche ich, senke ich schamvoll mein Haupt

              Dagobert

              »» das liegt daran, dass die Objekte noch nicht geladen sind, wenn du das Skript aufrufst.
              »» onLoad im Body-Tag wird das Problem lösen.

              Hast du den Code des OPs überhaupt versucht zu verstehen?!

              Mathias

      2. Hellihello Felix,

        Lieber frankx,

        »» wie gibst Du per Hand ein, wie übergibst Du per Variable?

        Und hier die Tipps für Fragende.

        Bezogen sich die Tipps für Fragende jetzt auf meine Frage? (;-).

        Dank und Gruß,

        Robert aka

        frankx

        --
        tryin to multitain  - Globus = Planet != Welt
    2. wie gibst Du per Hand ein, wie übergibst Du per Variable?

      per Variable siehst Du in der init Funktion und per Hand habe ich einfach mal

      var el = document.getElementById("el_newvenue");

      geschrieben ...

      1. Hellihello

        »» wie gibst Du per Hand ein, wie übergibst Du per Variable?

        per Variable siehst Du in der init Funktion und per Hand habe ich einfach mal

        var el = document.getElementById("el_newvenue");

        geschrieben ...

        Ondomready wird die Funktion einmal ausgeführt und funktioniert?

        Und wie wird sie danach aufgerufen?

        Pack doch mal ein alert(elementid) in die Funktionen zum Testen.

        Dank und Gruß,

        frankx

        --
        tryin to multitain  - Globus = Planet != Welt
  2. window.addEventListener("ondomready", init_venue('0'), false);

    Du willst, dass beim Eintreten des Events die Funktion init_venue ausgeführt wird und ihr sollen Parameter übergeben werden.

    Was du hier machst, ist aber was ganz anderes! Wenn der Browser diese JS-Codezeile ausführt, dann wird löst er erst alle Ausdrücke in den Funktionsparametern auf. Das heißt: init_venue(0) wird direkt ausgeführt und dessen Rückgabewert wird an addEventListener übergeben. addEventListener erwartet wahrscheinlich ein Funktionsobjekt. Du übergibst aber keines, denn init_venue gibt nichts zurück.

    Daraus resultiert, dass init_venue sofort ausgeführt wird, und nicht erst ondomready, wenn das DOM zur Verfügung steht. Klar, in dem Moment kannst du nicht mit getElementById auf Elemente zugreifen.

    Du musst also ein Funktionsobjekt übergeben, das den init_venue-Funktionsaufruf kapselt. Das ginge z.B. mit einer Function-Expression:

    window.addEventListener("ondomready", function () { init_venue('0') }, false);

    http://redaktion.selfhtml.org/selfhtml-preview/javascript/einbindung.html#fehler-handler-aufrufen (gilt sowohl fürs traditionelle Event-Handling wie auch für die Benutzung von addEventListener und Helferfunktionen)
    http://aktuell.de.selfhtml.org/weblog/javascript-syntax

    Mathias

    1. http://redaktion.selfhtml.org/selfhtml-preview/javascript/einbindung.html#fehler-handler-aufrufen (gilt sowohl fürs traditionelle Event-Handling wie auch für die Benutzung von addEventListener und Helferfunktionen)
      http://aktuell.de.selfhtml.org/weblog/javascript-syntax

      Herzlichen Dank ! Genau das war's ...

    2. Hellihello

      window.ondomready = function() {
       init_venue('0')
      }

      geht nicht?

      Dank und Gruß,

      frankx

      --
      tryin to multitain  - Globus = Planet != Welt
  3. window.addEventListener("ondomready", init_venue('0'), false);

    P.S. Benutzt du irgendeine JS-Bibliothek? Wenn ja, welche?
    Den Event ondomready gibt es standardmäßig nicht.

    Mathias