Fabian Bernecker: Radiobuttons mit JavaScript disablen

Dies ist eine Funktion zum deaktivieren einzelner Formulare. Allerdings ist sie leider noch nicht fertig :/ Mein Problem ist das ich gerne testen würde ob uebergabe[i] ein <input type="radio"> ist. Wenn ja würde ich das gerne komplett disablen.

MfG

Fabian Bernecker

function check(arg_lock, arg_string)
{
    uebergabe = arg_string.split("|");

if((eval("document.all." + arg_lock + ".checked") == 1 || arg_lock == 1) && arg_lock != 0)
    {
        for(var i=0;i<uebergabe.length;i++)
        {
            eval("document.all['" + uebergabe[i] + "'].disabled = true;");
            eval("document.all['" + uebergabe[i] + "'].readonly = true;");
            eval("document.all['" + uebergabe[i] + "'].style.backgroundColor = "#F3F3F3";");
        }
    }
    else
    {
        for(var i=0;i<uebergabe.length;i++)
        {
            eval("document.all['" + uebergabe[i] + "'].disabled = false;");
            eval("document.all['" + uebergabe[i] + "'].readonly = false;");
            eval("document.all['" + uebergabe[i] + "'].style.removeAttribute("backgroundColor","false");");
        }
    }
}

  1. function check(arg_lock, arg_string)
    {
        uebergabe = arg_string.split("|");

    if((eval("document.all." + arg_lock + ".checked") == 1 || arg_lock == 1) && arg_lock != 0)

    argghh, das ist IE 4 syntax und unötiges eval geraffel.

    Da deine Parameter mir nicht klar sind, weiß ich nicht, wie du an das Formular kommst, aber am einfachsten ist es so:

    <form ... onsubmit="return check(this);">

    und in der Funktion

    function check(form)
    {
        alert(form['nameDerCheckbox'].type);

    }

    {
            for(var i=0;i<uebergabe.length;i++)
            {
                eval("document.all['" + uebergabe[i] + "'].disabled = true;");
                eval("document.all['" + uebergabe[i] + "'].readonly = true;");
                eval("document.all['" + uebergabe[i] + "'].style.backgroundColor = "#F3F3F3";");
            }
        }

    Wer bringt einem eigentlich diesen eval Quatsch bei? Das laßt sich viel schöner, schneller, besser lesbarer und Debugfreundlicher ohne eval machen.

    Struppi.

    1. Nehmen wir mal an das bla einen Radío Button darstellt. Egal ob selektiert oder nicht, ein Radio/Checkbox gibt immer undefined bei .tagName zurück. Der 2. Teil der Bedingung prüft dann ob es sich um einen Radio Button handelt. Würde man den ersten Teil weglassen und der Browser als zuerst den 2. Teil ausführen, dann kommt es zu einer Fehlermeldung wenn es sich um was anderes als radio/checkbox handelt. Und zu meiner Funktion. arg_block is der name einer checkbox, bzw 1 oder 0, blocken oder freischalten. arg_string sind die inhalte des formulars, feld1|feld2|... (deswegen auch split("|")).

      if((!document.all.bla.tagName) && document.all.bla[0].type=="radio")
      {
       return true;
      }

      1. Nehmen wir mal an das bla einen Radío Button darstellt. Egal ob selektiert oder nicht, ein Radio/Checkbox gibt immer undefined bei .tagName zurück. Der 2. Teil der Bedingung prüft dann ob es sich um einen Radio Button handelt. Würde man den ersten Teil weglassen und der Browser als zuerst den 2. Teil ausführen, dann kommt es zu einer Fehlermeldung wenn es sich um was anderes als radio/checkbox handelt. Und zu meiner Funktion. arg_block is der name einer checkbox, bzw 1 oder 0, blocken oder freischalten. arg_string sind die inhalte des formulars, feld1|feld2|... (deswegen auch split("|")).

        was ist tagName für ein Attribut? Das kenn ich nicht.

        Was du da machst klingt für mich extrem umständlich, ich glaub nicht das du solche Verrenkungen machen musst. Aber ohne genauere infos (Url?) weiß man es nicht.

        if((!document.all.bla.tagName) && document.all.bla[0].type=="radio")
        {
         return true;
        }

        Das ist nach wie vor IE 4 Syntax, unnötigerweise, da jeder JS fähige Browser Formulare verarbeiten kann, aber so kann es nur IE 4 und wenn du Glück hast auch noch die nächsten Generationen von IE Browser (und Opera), aber sonst keiner.

        Struppi.