JavaScript document.getElementById(), habe aber nur Name="xx" - Workaround?

cumulonimbus8

Fleet Admiral
Registriert
Apr. 2012
Beiträge
19.422
Hallo!

Ein Programm liefert für sich automatisiert Code. Zu seiner Funktion bedarf es einer Konstruktion wie…
<INPUT Type="text" Name="T3_1" Size="3" Maxlength="3" onKeyUp="this.value=iVal(this.value)">

Leider muss ich dieses und andere Elemente mit JS greifen wozu mir document.getElementById("T3_1") zu Gebote seht. Also muss ich per Hand o.g. Zeile frisieren:
<INPUT Type="text" Name="T3_1" id="T3_1" Size="3" Maxlength="3" onKeyUp="this.value=iVal(this.value)">

Und das ist schlicht nicht recht praktikabel. Gibt es eine »sichere« JS-Konstruktion die (auch) Name erfasst statt nur id?

CN8
 
Woops, sorry, hätte das auch direkt kopieren sollen :P Im Link ist's ja richtig :)
 
Zuletzt bearbeitet:
Aha. Sollte ich mich nicht täuschen hatte ich beide Varianten erfolglos probiert, mit und ohne s. Es mit …Name zu versuchen lag ja mehr als nahe.

@Mihawk90
Inwiefern nützt mir de Suche nach Selektoren (mir völlig unbekannt bisher) hier? Ich habe keine Idee wie ich damit etwas erreiche.

CN8
 
cumulonimbus8 schrieb:
Aha. Sollte ich mich nicht täuschen hatte ich beide Varianten erfolglos probiert, mit und ohne s.
Wenn getElementsByName() bei Dir nicht funktioniert, dann liegt es nahe, dass Dein Code fehlerhaft ist. Hast Du berücksichtigt, dass der Rückgabewert eine Collection ist?
 
OK…
Der Rückgabewert ist ein einfacher Rückgabewert, keine Collection.

Und, ehrlich, ich find's nicht I.O. Code vorzuschlagen, der (A) an Bedingungen geknüpft ist (kann ein Eingabefeld denn eine Collection sein?) und (B) daher nicht 1:1 arbeitet um für das Beispiel zu greifen.

CN8
 
lol

was bitte geht an dem vorgeschlagenem code nicht?
du hast ja nichtmal geschrieben was du mit dem input-field vorhast. willst du den wert? es bearbeiten?
 
cumulonimbus8 schrieb:
Der Rückgabewert ist ein einfacher Rückgabewert, keine Collection.
getElementsByName() gibt eine Collection zurück mit allen Elementen die den gesuchten Namen haben. Wenn es nur ein Element gibt, dann hat die Collection halt nur einen Eintrag, aber es ist immer noch eine Collection. Das muss man bei der Verarbeitung des Rückgabewerts berücksichtigen, da es sich von getElementByID() unterscheidet.

cumulonimbus8 schrieb:
Und, ehrlich, ich find's nicht I.O. Code vorzuschlagen, der (A) an Bedingungen geknüpft ist (kann ein Eingabefeld denn eine Collection sein?) und (B) daher nicht 1:1 arbeitet um für das Beispiel zu greifen.
Nicht das Eingabefeld ist eine Collection - das Eingabefeld ist ein Item der Collection. getElementsByName() arbeitet nun einmal etwas anders als getElementByID(), da Name kein eindeutiger Bezeichner ist. Außerdem ist getElementsByName() für das Beispiel geeignet, Du musst nur Deinen Code anpassen. Du kannst nicht einfach nur die Funktionen austauschen.
 
der oben gennate vorschlag mit
Code:
getElementByName()
sollte funktinieren..
mit querySelector würde das ganze so aussehen
Code:
document.querySelector('input[name="T3_1"]')

und vll soltest du dir mal einen coding style aneigenen der nicht dafür sorgt, dass einem die augen weh tun :(
 
Ich finde es lustig wie man hier belehrt wird. Vielleicht mag man doch bitte die Aufgabe lesen?

Ein Programm liefert für sich automatisiert Code. Zu seiner Funktion bedarf es einer Konstruktion wie…
@beig1: dir verginge bei dem Programm ganz schnell das Lachen, glaub mir das.

«Seine Funktion» meint die des Programms. Da kann ich nichts am Code ändern, ich muss mit dem leben was ich bekomme [außer ich ändere alles jedes Mal und das ist völlig Banane]. Dass ich selbst id="x" einsetze wenn ich was schreibe mag man mir doch wohl zutrauen?

@Andreas_
Der Rückgabewert ist das was von dem was existiert zurückkommt - der Inhalt eines Textfeldes.
Typisches MS-Sprech… Eine Collection ist eine Collection und getElementsByName() gibt keine Collection zurück - es ist diese Collection [mich interessiert wenn das Innenleben der Collection nicht diese an sich]. Und der Rückgabewert eines Textfelds ist das was drin steht. getElementById().value gibt mir eben diesen Wert zurück. Ohne Value bekäme ich das Element, und das dann auch nicht zurück

@kling1
getElementByName() funktioniert (betreffend des Beispiels) rundweg nicht, auch wenn es das sollte. Wie weit mir die querySelector-Snytax hilft wäre zu prüfen.

was bitte geht an dem vorgeschlagenem code nicht?
Tja… Der Code eben. Ich bekomme halt nur name="x" und kann mit getElementById() nicht an diesen name ran. getElementByName() - siehe oben.
Ich muss jede verfl. Zeile aus dem Programm umfrisieren, dass statt name="x" (und mehr bekomme ich nicht) eben name="x" id="x" drin steht. Das ist ein arger Aufwand. Und den wollte ich mir und Kollegen ersparen.

du hast ja nichtmal geschrieben was du mit dem input-field vorhast. willst du den wert? es bearbeiten?
Beides. Also muss ich seien .value angreifen. Eine Collection aufzudröseln taugt nicht da ich (netterweise) die names = ids der Textfelder explizit mit einer Schleife ablaufen kann.

CN8
 
was passt an
Code:
document.getElementsByName('T3_1')[0].value;

nicht? jedes input feld hat doch einen eigenen namen?
also kannst du alle abfragen.

und kannst du auch verständlicher schreiben? DA wird einem ja schlecht was du von dir gibst
 
Es ist schon dreist nach Hilfe zufragen, Antworten zu bekommen und dann die Leute anzupampen, wenn einem die Antworten nicht passen.

getElementsByName() gibt eine Collection zurück, genauso wie getElementById() ein Objekt zurückgibt. getElementById().value ist nur eine Kurzschreibweise um auf dem zurückgegebenen Objekt auf den Member Value zuzugriefen. Falls es Dir noch nicht aufgefallen ist, ist Programmieren eine präzise Angelegenheit und es hilft, sich dann auch Präzise auszudrücken um Missverständnisse zu vermeiden. Klar gelingt das nicht jedem Einsteiger direkt, das ist auch völlig in Ordnung, es ist auch völlig in Ordnung in seiner eigenen Sprache nach Hilfe zu fragen und nachzufragen wenn einem die korrekte Ausdrucksweise noch nicht geläufig ist und man sie nicht versteht. Aber der Ton macht hier die Musik. Von daher noch viel Spaß mit Deinem Problem.
 
Zurück
Oben