Rafael: getElementsByName und Sonderzeichen

Hallo Forum,

ich habe gerade ein ziemliches Problem mit JavaScript. Eine Funktion von der ich dachte, dass sie einwandfrei arbeitet macht mir Probleme.

Und zwar habe ich ein Array aus Namen von automatisch generierten Text-Feldern, die "ausgeschaltet" also disabled werden sollen. Diese sind in einem Array der Form gespeichert;

var hidefields = new Array('Besuchszeit von', 'Besuchszeit bis', 'Wiedervorlage_änderung');

Die ersten beiden laufen auch einwandfrei durch die Schleife. Nur der dritte Name macht mir Probleme. JavaScript kann ihn aus unerfindlichen Gründen nicht ansprechen. Das seltsame: An einer anderen Stelle kann ich das Feld ohne weiteres per onclick="Kalender.anzeige('Wiedervorlage_änderung') ansprechen. In dieser Funktion hole ich mir das Feld auch per getElementsByName.

Gibt es da bekannte Probleme?
Ich kann leider keine Lösungswege finden.
Danke an die Helfenden.

  1. Okay, Fehler selbst gefunden... Javascript äöüß -> HTML trotzdem ä

    1. echo $begrüßung;

      Okay, Fehler selbst gefunden... Javascript äöüß -> HTML trotzdem ä

      Auch HTML benötigt nicht zwingend die Entity-Schreibweise. Siehe Kapitel Zeichenvorrat, Sonderzeichen und HTML-eigene Zeichen

      echo "$verabschiedung $name";

      1. Ich bin dem Link gefolgt, habe es gelesen, muss aber sagen, dass ich die betreffende Stelle nicht finden kann. Oder meinst du, für den Fall, dass ich zum Beispiel UTF-8 kodiere?

        Ist das denn ratsam?

        1. echo $begrüßung;

          Ich bin dem Link gefolgt, habe es gelesen, muss aber sagen, dass ich die betreffende Stelle nicht finden kann.

          Ich meinte die Einleitung des Textes. Die sollte dich darauf bringen, dass den beteiligten Programmen die Bedeutung des ankommenden Bytestroms klar sein muss. In Bezug auf Zeichen heißt das, dass der Empfänger wissen muss, welche Kodierung der Absender verwendet hat, um die Bytes richtig zu interpretieren und daraufhin z.B. das richtige Zeichen anzeigen zu können.

          Wenn du also als Kodierung ISO-8859-1 wählst, dann kannst du damit die deutschen Umlaute direkt in deinen Text einfügen, weil ISO-8859-1 dafür jeweils einen Bytewert kennt. Anders wäre es beim Euro-Zeichen, denn das ist in dieser Kodierung nicht vorgesehen. Das kannst du nur als Entity (oder numerische Zeichenreferenz) notieren.

          Oder meinst du, für den Fall, dass ich zum Beispiel UTF-8 kodiere? Ist das denn ratsam?

          Wenn du deutlich mehr als die in Westeuropa üblichen Zeichen verarbeiten willst, ist UTF-8 ratsam. Voraussetzung für einen reibungslosen Betrieb damit ist - wie oben erwähnt - dass alle beteiligten Komponenten damit umgehen können und Bescheid wissen, dass diese Kodierung verwendet wird.

          echo "$verabschiedung $name";

  2. Hi!

    var hidefields = new Array('Besuchszeit von', 'Besuchszeit bis', 'Wiedervorlage_änderung');

    Das sind die Namen deiner Input-Felder? Habe ich das richtig verstanden?

    <input type="text" name="Besuchszeit von">
    <input type="text" name="Besuchszeit bis">
    <input type="text" name="Wiedervorlage_&auml;nderung">

    Das würde ich mich nicht trauen...
    Jegliche Whitespaces und Sonderzeichen würde ich niemals als Namen/Bezeichner verwenden.

    Wenn ich mir allerdings die HTML-4.01-Transitional-DTD ansehe (Auszug):

    <!ENTITY % InputType
      "(TEXT | PASSWORD | CHECKBOX |
        RADIO | SUBMIT | RESET |
        FILE | HIDDEN | IMAGE | BUTTON)"
       >

    <!-- attribute name required for all but submit and reset -->
    <!ELEMENT INPUT - O EMPTY              -- form control -->
    <!ATTLIST INPUT
      %attrs;                              -- %coreattrs, %i18n, %events --
      type        %InputType;    TEXT      -- what kind of widget is needed --
      name        CDATA          #IMPLIED  -- submit as part of form --
      >

    dann ist das Name-Attribut vom Typ CDATA (Character Data).
    Das heißt, daß & als einfaches Zeichen interpretiert wird und damit seine besondere Bedeutung (zur Einleitung von Entities) verliert.

    Ich würde dir in jedem Fall dazu raten, daß du alle Leer- und Sonderzeichen komplett aus deinen Namen rauslässt. Damit ersparst du dir einige Probleme.

    Schöner Gruß,
    rob

    1. Hallo,

      dann ist das Name-Attribut vom Typ CDATA (Character Data).
      Das heißt, daß & als einfaches Zeichen interpretiert wird und damit seine besondere Bedeutung (zur Einleitung von Entities) verliert.

      Das ist falsch, Entity-Referenzen werden in CDATA-Attributen sehr wohl geparst.
      http://www.w3.org/TR/html401/types.html#type-cdata

      Mathias

      1. Hello out there!

        Entity-Referenzen werden in CDATA-Attributen sehr wohl geparst.

        Aus eben diesem Grund muss ja auch ein '&' im Wert eines 'href'-Attributs als '&amp;' bzw. NCR geschrieben werden.

        See ya up the road,
        Gunnar

        --
        „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
    2. Das würde ich sogar gerne, aber ich schreibe eine Software, die Datenbanken automatisch in ein einfaches Benutzerinterface spielt, also ähnlich phpMyAdmin nur für den Laiennutzer. Da ich nicht wissen kann, ob die Datenbank Sonderzeichen beinhaltet muss ich ihr wohl oder übel beibringen auch mit diesen zu arbeiten...

      Trotzdem danke für den guten Ratschlag. Hatte das JavaScript bereits als cdata deklariert, aber er will trotzdem die "Original"-Sonderzeichen (siehe meine Antwort auf mich selbst).

      Grüße.