hawkmaster: Disable funktioniert im Firefox nicht?

Hallo zusammen,

ich habe mehrere Formular Elemente auf einer Seite z.b. wie folgt:
<div id="warn_chk_Range"><input name="chk_Range"  type="checkbox" value="1">&nbsp;Range</div>

Alle Elemente sind mit einer eindeutigen DIV ID gekennzeichnet.
Mit einer Javascript Funktion kann / will ich die Elemente disablen:

function disable_element(elm_id) {
  elm = document.getElementById(elm_id);
  elm.setAttribute("disabled","disabled");
}
Das funktioniert wunderbar im IE6 und IE7 und ich meine das es auch im alten Firefox ging.
Auf jedefall wirkt sich das im Firefox 2.0.0.3 nicht aus. Alle Elemente sind normal und werden nicht ausgegraut.
Kann mir jemand weiterhelfen oder hat eine Idee warum das im FF nicht geht?

Gruss und danke
hawk

  1. Hallo,

    Probier mal folgendes:

      
    function disable_element(elm_id) {  
       elm = document.getElementById(elm_id);  
       elm.disabled = "disabled";  
    }  
    
    

    Selfhtml:setAttribute(), -> "beachten Sie"
    Selfhtml:Javascript-Attributreferenz

    Gruß, der Arbeitslose

    1. Hallo
      danke dir
      Leider brachte dies keine Änderung.

      Gruss
      hawk

  2. ich habe mehrere Formularelemente auf einer Seite z.b. wie folgt:
    <div id="warn_chk_Range"><input name="chk_Range"  type="checkbox" value="1">&nbsp;Range</div>

    elm = document.getElementById(elm_id);
      elm.setAttribute("disabled","disabled");

    Kann mir jemand weiterhelfen oder hat eine Idee warum das im FF nicht geht?

    Weil <div> kein HTML-Attribut namens disabled kennt. Macht IMHO auch irgendwie keinen Sinn, ein totes Element zu deaktivieren; bei <form> ja, aber das kennt disabled leider auch nicht.
    Schalte die <input>-Elemente in einer Schleife aus.

    Davon unabhängig solltest du

    elm.disabled = true;

    benutzen, und da du auf die Fehlerprüfung eh verzichtest

    document.getElementById(elm_id).disabled = true;

    1. Hallo
      danke auch dir;

      was meinst du mit ;

      <<Schalte die <input>-Elemente in einer Schleife aus.>>??

      Die Elemente sind doch statisch auf dem Form und je nach Bedingung (die kommt per PHP aus einer Datenbank)
      will ich das eine oder andere textfeld, checkbox oder anders disablen bzw. audgrauen?

      Hast du eine andere Idee?

      Gruss
      hawk

      1. hi,

        bitte spiele nicht mit den beim Antworten vorgegebenen Zitatzeichen herum, dann bleibt die Konversation leichter lesbar.

        was meinst du mit ;

        <<Schalte die <input>-Elemente in einer Schleife aus.>>??

        bla ging wohl davon aus, dass du mehrere Elemente auf einmal disablen wolltest. Willst du das nicht, brauchst du natürlich auch keine Schleife.

        Hast du eine andere Idee?

        Beseitige den logischen Fehler, auf den bla dich hinwies.

        gruß,
        wahsaga

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

          bla ging wohl davon aus,

          Sorry, du schreibst dich ja gross.

          gruß,
          wahsaga

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

        was meinst du mit:

        Schalte die <input>-Elemente in einer Schleife aus.

        Du durchläufst in einer Schleife alle input-Elemente und entscheidest, ob du es ausgrauen möchtest oder nicht.

        Die Elemente sind doch statisch auf dem Form und je nach Bedingung (die kommt per PHP aus einer Datenbank)
        will ich das eine oder andere textfeld, checkbox oder anders disablen bzw. audgrauen?

        Okay, und warum tust du es dann nicht?
        Du vergibst deinen input-Elementen nicht mal eine ID, erwartest aber, dass du sie trotzdem ansprechen kannst? (Was natürlich möglich ist. Allerdings kannst du ein Element, das keine ID hat, auch nicht über diese ansprechen.)

        Hast du eine andere Idee?

        Es gibt keine "andere" Idee. Wähle das input-Feld aus, das du ausgrauen möchtest und es funktioniert.
        Ein Div kann man nicht ausgrauen.

        MfG H☼psel

        --
        "It's amazing I won. I was running against peace, prosperity, and incumbency."
        George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
        Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
      3. was meinst du mit

        Schalte die <input>-Elemente in einer Schleife aus.

        Wie schon gesagt wurde, dachte ich, du wolltest einen ganzen Block ausschalten. Falls dem so ist, kannst du dir wie gehabt das <div>- oder Was-auch-immer-Element ranholen und in einer Schleife sein childNodes-Attribut duchlaufen (ist ein Feld, das alle Kinder enthält), in etwa so:

        var i;
        var d = document.getElementById("element-id");
        for (i = 0; i < d.childNodes.length; i++) {
            if (d[i].nodeName = "INPUT") {
                d[i].disabled = true;
            }
        }

        Das Beispiel ist allerdings nicht gerade elegant, weil es a) nur <input>-Element ausschaltet (für <textarea> & Co. müsste die if-Abfrage entsprechend erweitert werden) und b) nur die direkten Kinder von element-id betrifft (für Kindeskinder müsste alles in eine Funktion, die sich rekursiv aufruft).
        Aber das Prinzip sollte deutlich geworden sein, die Erweiterung überlasse ich dir zur Übung.

        Die Elemente sind doch statisch auf dem Form und je nach Bedingung (die kommt per PHP aus einer Datenbank)

        Du entscheidest per PHP? Machst du AJAX? Falls nicht, schreib doch gleich in PHP das disabled-Attribut zum betreffenden Element. Per PHP Javascript-Code zu erzeugen, der dann seinerseits die Elemete ausschaltet, finde ich etwas sehr kompliziert (zumindest so, wie es sich bis hierhin darstellt).

  3. Ahoi hawkmaster,

    wie wäre es damit die Divs auszublenden mit:
    http://de.selfhtml.org/css/eigenschaften/positionierung.htm#display
    oder
    http://de.selfhtml.org/css/eigenschaften/positionierung.htm#visibility

    MfG

    1. wie wäre es damit die Divs auszublenden mit display oder visibility

      Dann verschwinden komplette Seitenteile, was unter Umständen für den Überblick des Besuchers nicht gerade förderlich ist.

  4. Hallo nochmals
    vielen Dank nochmals an alle für die Tipps.
    Ich hatte zuerst jedes Element mit eindeutingen IDs versehen.
    Ich wollte mit den divs erreichenm, dass ALLES also auch der Text bzw. die Bescreibung neben dem Feld auch eingeschlossen wird.
    Wenn ich es so mache, ist der Text "Range" ja noch ganz "normal".

    <input name="chk_Range"  type="checkbox" id="warn_chk_Range" value="1">&nbsp;Range

    Wie könnte man es erreichen das der Text vielleicht eine andere Farbe annimmt?

    Gruss und danke
    hawk

    1. Hallo,

      <input name="chk_Range"  type="checkbox" id="warn_chk_Range" value="1">&nbsp;Range

      Wie könnte man es erreichen das der Text vielleicht eine andere Farbe annimmt?

      Pack die Beschreibung in ein <label> das du dem <input> zuweist. Wenn du Glück hast wird das automatisch deaktiviert dargestellt, wenn du das zugehörige Formularelement deaktivierst, sonst musst du halt über Javascript nachhelfen.

      Jonathan

      --
      Selfcode: ie:( fl:{ br:> va:) ls:& fo:) rl:? ss:} de:> js:| ch:? mo:} zu:)
    2. <input name="chk_Range"  type="checkbox" id="warn_chk_Range" value="1">&nbsp;Range

      Wie könnte man es erreichen das der Text vielleicht eine andere Farbe annimmt?

      <label><input type="checkbox" onclick="this.parentNode.style.color ='#999';this.disabled=true;">label</label>

      Struppi.

      --
      Javascript ist toll (Perl auch!)
      1. Ich habe es jetzt so gelöst:
        Ich hoffe es spricht nichts dagegen;

        Das Input Feld bekommt die ID und der Text davor ein Div mit ID plus Ergänzug "_Label"
        <div id="warn_txt_RangeFrom_Label">From&nbsp;</div><input name="txt_RangeFrom" id="warn_txt_RangeFrom" type="text" value="Text" />

        function disable_element(elm_id) {
         elm = document.getElementById(elm_id);
         elm.disabled = true;
        elm_label = document.getElementById(elm_id+"_Label");
        elm_label.parentNode.style.color ='#999';
        }

        1. Hallo,

          Ich habe es jetzt so gelöst:
          Ich hoffe es spricht nichts dagegen;

          Das Input Feld bekommt die ID und der Text davor ein Div mit ID plus Ergänzug "_Label"
          <div id="warn_txt_RangeFrom_Label">From&nbsp;</div><input name="txt_RangeFrom" id="warn_txt_RangeFrom" type="text" value="Text" />

          Wenn du noch aus dem <div> ein <label> machst, wird es fast perfekt.

          Jonathan

          --
          Selfcode: ie:( fl:{ br:> va:) ls:& fo:) rl:? ss:} de:> js:| ch:? mo:} zu:)