Jürgen Berkemeier: Dynamische Inputs und deren Name

Hallo,

mit folgendem Script erzeuge ich dynamisch ein Inputfeld:

...
<script type="text/javascript">
function start() {
var ipt = document.createElement("input");
ipt.size=2;          //geht in IE, MOZ, Opera
ipt.name="x_y_z";    //geht in MOZ, Opara
ipt.onclick="alert(this.name)"; //geht in Opera
ipt.value="F4";      //geht in IE, MOZ, Opera
document.getElementsByName("frm")[0].appendChild(ipt) ;

if (document.frm.x_y_z) alert(document.frm.x_y_z.value);
}
</script>
...
<body onload="start()">

<form name="frm" action="" method="" target="">
<input type="Text" name="i_n_p" value="F1" size="" maxlength="" onclick="alert(this.name)">
</form>
...

leider werden nicht alle Attribute in allen Browsern dynamisch gesetzt. Siehe hierzu die Kommentare im Script. Wichtig sind für mich size, value und name. Und gerade das name-Attribut wird im IE nicht gesetzt. Der alert kommt nur im Moz und im Opera. Mit createAttribute und setAttributeNode habe ich es auch schon versucht, ohne Erfolg.
Wie kann man mit Javascript den Namen eines inputs setzen?

Gruß, Jürgen

  1. Hi,

    Und gerade das name-Attribut wird im IE nicht gesetzt. Der alert kommt nur im Moz und im Opera.

    Das könnte aber auch heißen, daß das onclick-Attribut im IE nicht gesetzt wurde...

    cu,
    Andreas

    --
    MudGuard? Siehe http://www.Mud-Guard.de/
    1. Hallo Andreas,

      Und gerade das name-Attribut wird im IE nicht gesetzt. Der alert kommt nur im Moz und im Opera.

      Das könnte aber auch heißen, daß das onclick-Attribut im IE nicht gesetzt wurde...

      hier war der alert im Script-Teil, nicht der oncklick gemeint. Hiermit prüfe ich, ob ein Element mit diesem Namen existiert.

      Gruß, Jürgen

  2. Hi,

    leider werden nicht alle Attribute in allen Browsern dynamisch gesetzt.

    nein, im Gegensatz zum Einsatz von element.setAttribute() - was zumindest nicht mehr einschränkt, als es bei document.createElement() der Fall ist, welches Du keinesfalls ungeprüft verwenden darfst.

    Mit createAttribute und setAttributeNode habe ich es auch schon versucht, ohne Erfolg.

    Beides zu komplex.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo Cheatah,

      leider habe ich Deine Antwort nicht verstanden.
      Wie kann ich denn jetzt das name-Attribut setzen?

      Gruß, Jürgen

      1. Hi,

        leider habe ich Deine Antwort nicht verstanden.

        das ist weder ungewöhnlich für meine Antworten, noch ein unbedingt endgültiger Zustand.

        Wie kann ich denn jetzt das name-Attribut setzen?

        Du hast es bereits richtig versucht, nur mit der falschen Methode. Die bessere habe ich genannt.

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hallo Cheatah,

          ich habe es jetzt mit

          ipt.setAttribute("name","x_y_z");

          versucht. Klappt auch nicht. Offensichtlich kann der IE das nicht. Thomas hat ja schon einen Workaround angegeben, aber ich brauche den Namen nur, um mit document.formularname.elementname darauf zugreifen zu können. Zum Glück geht es auch mit getElementsByTagName.
          Danke für Deine Hilfe.

          Gruß, Jürgen

  3. Hallo,

    ipt.onclick="alert(this.name)"; //geht in Opera

    ...

    Der alert kommt nur im Moz und im Opera.

    Probiere es mit:
    ipt.onclick=function(){alert(this.name)};

    MfG, Thomas

    --
    SVG - Learning By Coding
    http://svglbc.datenverdrahten.de/
    1. Hallo Thomas,

      Probiere es mit:
      ipt.onclick=function(){alert(this.name)};

      hab ich gemacht, bringt aber keine Änderung. Der onclick ist aber auch nicht wichtig für mich, der ist nur zum Debuggen gedacht.

      Gruß, Jürgen

      1. Hallo,

        ipt.onclick=function(){alert(this.name)};
        hab ich gemacht, bringt aber keine Änderung. Der onclick ist aber auch nicht wichtig für mich, der ist nur zum Debuggen gedacht.

        Naja, immerhin kommt damit die Ausgabe von this.name im IE zustande, aber das Attribut selbst ist nicht gesetzt:

        Test mit:
        alert(document.getElementsByName("frm")[0].innerHTML);

        Auch das "alte IE-Hausmittel" dritter Parameter bei setAttribute() hilft hier nicht:
        inp.setAttribute("name","x_y_z",true);

        Als Workaround faellt mir nur noch ein, innerHTML zu verwenden. Zumindest Mozilla-Derivate, Opera 7.x und IE verstehen das:

        document.getElementsByName("frm")[0].innerHTML+='<input size="2" name="x_y_z" value="F4" onclick="alert(this.name)">';

        MfG, Thomas

        --
        SVG - Learning By Coding
        http://svglbc.datenverdrahten.de/
        1. Hallo Thomas,

          Ich brauche den Namen nur, um mit document.formularname.elementname darauf zugreifen zu können. Zum Glück geht es auch mit getElementsByTagName.
          Danke für Deine Hilfe.

          Gruß, Jürgen

          1. Hallo,

            Ich brauche den Namen nur, um mit document.formularname.elementname darauf zugreifen zu können. Zum Glück geht es auch mit getElementsByTagName.

            Wenn es nur um den Zugriff geht, kaeme auch das Erzeugen von IDs in Betracht:

            ipt.setAttribute("id","x_y_z");
            ...
            if (document.getElementById("x_y_z"))alert(document.getElementById("x_y_z").value);

            Klappt im IE 5.5 und 6.0.

            MfG, Thomas

            --
            SVG - Learning By Coding
            http://svglbc.datenverdrahten.de/