Gerrit: Formular-Funktionen (function setlay)

Hallo zusammen!

Ich habe ein Problem mit einem HTML-Umfrage-Formular (s. Link oben), wo ich mit JavaScript eine Funktion eingebaut habe.

Klicke ich im Umfrage-Formular auf eine Antwort, wird ein Layer ein- bzw. ausgeblendet. Unter FireFox funktioniert das auch ganz gut. Im Internet Explorer scheint das JavaScript keine Wirkung zu zeigen, da das Layer permanent eingeblendet wird.

Gibt es hier evtl. eine Browser übergreifende Lösung?

Da ich kein Experte in JavaScript bin, bin ich auf Eure Hilfe angewiesen.

Vielen Dank im Voraus!

Gruß
Gerrit

  1. hi,

    Unter FireFox funktioniert das auch ganz gut. Im Internet Explorer scheint das JavaScript keine Wirkung zu zeigen, da das Layer permanent eingeblendet wird.

    das ist so gewollt - von dem jenigen, der das script erstellt hat.

    function setlay( objLayer, visible ) {
    if(document.layers){

    } else {
    if(!document.all) {

    }
    }
    }

    document.layers trifft nur für den alten netscape 4 zu.

    also gehen die modernen browser in den else-zweig.
    der internert explorer kennt document.all, als trifft die folgende, negierende bedingung für ihn ebenfalls nicht zu.
    darüber hinaus gibt es in dieser funktion keinerlei code mehr, den der IE jetzt auszuführen hätte. er macht also genau das, was er soll - nämich nichts.

    Da ich kein Experte in JavaScript bin, bin ich auf Eure Hilfe angewiesen.

    das element mit getElementById() anzusprechen, sollte eigentlich für alle halbwegs modernen browser ausreichen.

    und visibility auf 'hidden' und height auf '1' zu setzen, ist ebenfalls unfug.
    abgesehen davon, dass '1' hier ein ungültiger wert ist (es fehlt eine einheit), soll damit wohl erreicht werden, dass nach dem ausblenden des elementes der trotzdem noch reservierte platz verschwindet. das erreicht man aber viel einfacher über display:none, was für das ausblenden _ohne_ platzhalter gedacht ist.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hallo Wahsaga!

      erst mal vielen Dank für deine Antwort! Es stimmt auch, dass der "reservierte" Bereich nicht mehr freigegeben wird, wenn das Layer wieder ausgeblendet wird. Es bleibt ein großes Loch zu dem nächsten Textblock zurück. Und wenn ich mehrere Formularfelder mit diesem Script untereinander stelle, dann gibt es noch größere Darstellungsprobleme.

      Deine Lösung klingt logisch, aber für mich als JaveScript-Neuling zu schwer, um daraus ein lauffähiges Script zu stricken.

      Ich gehe mal davon aus, dass folgendes Script für mein Problem verantwortlich ist:

      function setlay( objLayer, visible ) {
      if(document.layers){
        objLayer.visibility = (visible == true) ? 'visible' : 'hidden';
        objLayer.height = (visible == true) ? 'auto' : '1';
      } else {
      if(!document.all) {
        objLayer.style.visibility = (visible == true) ? 'visible' : 'hidden';
        objLayer.style.height = (visible == true) ? 'auto' : '1';

      Leider habe ich keine Ahnung, welchen Bereich ich ersetzen müsste, da ich die Funktionen (noch) nicht beherrsche :-(

      Hilfe und Gedankenanstöße nehme ich gerne entgegen!

      Gruß
      Gerrit

      1. hi,

        Deine Lösung klingt logisch, aber für mich als JaveScript-Neuling zu schwer, um daraus ein lauffähiges Script zu stricken.

        den größten teil der funktionen kannst du ganz rausschmeißen.

        ungefähr so könnte es aussehen:

        function show_hide(checkboxAngekreuzt) {
           var displayWert, div;
           if(document.getElementById() && div = document.getElementById("ID_01")) {
              if(checkboxAngekreuzt) {
                 displayWert = "none";
              }
              else {
                 displayWert = "block";
              }
              div.style.display = displayWert;
           }
        }

        diese funktion rufst du dann auf der checkbox mit onClick="show_hide(this.checked);" auf.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }