Christian112: getElementsByName('name********')

Hallo,

ich habe 4 Eingabefelder die heißen (name-attribut) "mitarbeitername","mitarbeiterdatum", "mitarbeiterzeit" und "mitarbeiterbemerkung".
In einer Javascriptfunktion sollen sie erfasst werden und dann das Attribut 'readonly' bekommen.

Den relevanten Teil der Funktion stelle ich mir so vor:
document.GetElementByName('mitarbeiter*').setAttribut("readonly", "true", 0);

Das Problem befindet sich dort, wo das * steht. Wie bringe ich Javascript dazu alle Elemente, die mit 'mitarbeiter' beginnen zu selektieren?

Ich hoffe ihr könnt mir weiter helfen, Danke.

Christian

  1. Hi,

    Den relevanten Teil der Funktion stelle ich mir so vor:
    document.GetElementByName('mitarbeiter*').setAttribut("readonly", "true", 0);
    Das Problem befindet sich dort, wo das * steht. Wie bringe ich Javascript dazu alle Elemente, die mit 'mitarbeiter' beginnen zu selektieren?

    gar nicht, es gibt keine Wildcards in diesem Kontext.

    Du kannst aber mit getElementsByTagName() zunächst alle input-Elemente holen, darüber iterieren und zu jedem Element seine name-Eigenschaft abfragen, ob sie mit "mitarbeiter" beginnt.

    Darüber hinaus würde ich von getAttribute() und setAttribute() abraten. Erstens ist der direkte Zugriff auf die jeweiligen Eigenschaften klarer zu lesen, zweitens zickt der IE bei setAttribute gern mal rum. Mit dem direkten Zugriff auf die Eigenschaften hat er dagegen kein Problem.

    So long,
     Martin

    --
    Gültig sind Frauen ab 16, wohlgeformt ab 160 Pfund.
      (Gunnar Bittersmann)
    1. Du kannst aber mit getElementsByTagName() zunächst alle input-Elemente holen, darüber iterieren und zu jedem Element seine name-Eigenschaft abfragen, ob sie mit "mitarbeiter" beginnt.

      Darüber hinaus würde ich von getAttribute() und setAttribute() abraten. Erstens ist der direkte Zugriff auf die jeweiligen Eigenschaften klarer zu lesen, zweitens zickt der IE bei setAttribute gern mal rum. Mit dem direkten Zugriff auf die Eigenschaften hat er dagegen kein Problem.

      So long,
      Martin

      »»

      Hallo,

      danke vorerst. Ja der IE macht da die ganze Zeit schon Probleme, mal klappt es mit allen Inputs, mal nur mit manchen.

      Aber wie soll ich auf die Eigenschaft direkt zugreifen?

      1. @@Christian112:

        nuqneH

        Aber wie soll ich auf die Eigenschaft direkt zugreifen?

        Du möchtest in http://de.selfhtml.org/@title=SELFHTML nachlesen. Click.

        Du möchtest ein http://de.selfhtml.org/javascript/index.htm@title=JavaScript-Problem lösen. Click.

        Du möchtest dich über Eigenschaften/Methoden von http://de.selfhtml.org/javascript/objekte/index.htm@title=Objekten informieren. Click.

        Und zwar von http://de.selfhtml.org/javascript/objekte/elements.htm@title=Formularelementen. Click.

        War doch gar nicht so schwer zu finden, oder?

        Qapla'

        --
        Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
  2. @@Christian112:

    nuqneH

    Den relevanten Teil der Funktion stelle ich mir so vor:
    document.GetElementByName('mitarbeiter*').setAttribut("readonly", "true", 0);

    (1) Es gibt keine Methode 'document.GetElementByName'.

    (2) IEs zicken bei 'setAttribut' rum.

    Das Problem befindet sich dort, wo das * steht. Wie bringe ich Javascript dazu alle Elemente, die mit 'mitarbeiter' beginnen zu selektieren?

    Wenn es 4 sind, warum willst du sie per Wildcard ansprechen? Die lassen sich doch bequem einzeln auflisten.

    Es besteht keine Notwendigkeit, die Elemente per 'document.getElementsByName' zu suchen; <http://de.selfhtml.org/javascript/objekte/elements.htm@title=Schema 2> bietet sich an. Das dürfte etwas schneller sein.

    Anstatt 'setAttribut' setzt du direkt 'http://de.selfhtml.org/javascript/objekte/elements.htm#readonly@title=readOnly' – oder noch besser 'http://de.selfhtml.org/javascript/objekte/elements.htm#disabled@title=disabled', dann bekommt der Nutzer auch visuell dargestellt, dass er nichts eingeben kann.

    Qapla'

    --
    Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
  3. Hallo,

    Den relevanten Teil der Funktion stelle ich mir so vor:
    document.GetElementByName('mitarbeiter*').setAttribut("readonly", "true", 0);

    Das Problem befindet sich dort, wo das * steht. Wie bringe ich Javascript dazu alle Elemente, die mit 'mitarbeiter' beginnen zu selektieren?

    Das Problem fängt schon früher an, bei document.GetElementByName
    JavaScript ist sehr pingelig mit den Schreibweisen. Eine Methode "GetElementByName" gibt's normalerweise nicht, auch keine namens "setAttribut"

    Ich erschlage sowas manchmal mit einem Mammut-Statement:

    var inputs = arrayOf(document.[ref:self812;javascript/objekte/document.htm#get_elements_by_tag_name@title=getElementsByTagName]('[ref:self812;html/referenz/attribute.htm#input@title=input]')).[link:http://www.javascriptkit.com/jsref/arrays.shtml@title=filter](function(elt){return elt.name && elt.name.[ref:self812;javascript/objekte/string.htm#match@title=match](/^mitarbeiter/);}).[link:http://@title=forEach](function(elt){elt.[ref:self812;javascript/objekte/elements.htm#readonly@title=readOnly]=true;});  
    
    

    Eine Funktion arrayOf() muss man sich zuerst basteln, die anderen existieren bereits, aber nicht in allen Browsern.
    Also mach's lieber "zu Fuß".

    Gruß, Don P