apfelsine: Select Li Element on Keyup

Beitrag lesen

Hi,

var div = document.getElementById('targetUI');
newelement = '<li  class="selected"> <label name="' + item[0] + '" id="' + item[0] + '">' + item[1] + '</label></li>';

Zu label siehe oben. Warum steht da div als Variablenbezeichner?

weil das Ding, in dem sich die Liste befindet, die auch ein <ul> hat, (das du hier nicht sehen kannst, weil ich den Code weggelassen habe) ein Div ist.

Abgesehen davon produzierst du mit newelement eine globale Variable. Das möchtest du wahrscheinlich vermeiden und entweder hinter die Deklaration von div ein Komma setzen, oder die nächste Zeile mit einem var anfangen.

Richtig, habs schlichtweg vergessen zu hinzuschreiben. Danke.

Wenn du einen Transpiler wie Babel benutzt, kannst du übrigens auf die Stringkonkatenation mit dem überladenen Plusoperator verzichten und statt dessen Templateliterale verwenden. Zu dem Thema habe ich erst kürzlich was geschrieben.

var elementname = '\"' + item[0] + '\"';
var myelement= div.getElementsByTagName(elementname);

Was bezweckst du hiermit? Der erste Index des Arrays item soll die ID eines Elementes enthalten, nehme ich an, jedenfalls weist du den Wert oben den Attributen name und id zu.

ja, nachdem id und document.getElementyById(elementname) nicht funktioniert hat, hab ich ein div.getElementsByTagName(elementname) draus gemacht.

Damit rufst du dann die Methode getElementsByTagName auf. Das ergibt keinen Sinn. Wie der Name der Methode bereits vermuten lässt, sucht sie Elemente mit einem bestimmten tagName.

Jo, das macht in der Tat keinen Sinn. Wie gesagt getElementById hat nicht funktioniert. Ich hab auch das "Tag" von dem Teil überlesen. Es sollte eigentlich getElementsByName heißen.

Davon abgesehen, warum baust du double quotes in den String ein? Innerhalb des als Argument übergebenen Strings sollten keine Anführungszeichen stehen, sonst wirst du nicht finden wonach du suchst.

Reine Unsicherheit ... der Inhalt ist eine Zahl, ich war mir nicht sicher, was der Javascript Compiler daraus macht. Manchmal eben genau das. Eine Zahl, wo es ein String sein soll.

Sofern das so vom Browser verarbeitet werden soll, kann das nicht wie gewünscht funktionieren.

if (myelement!= null) {

Die bedingte Anweisung kannst du dir sparen, denn die Bedingung ist hier immer wahr.

In diesem Fall mag das sein, aber das war nicht immer so. Sie ist ein Überbleibsel als da noch GetElementById stand, damit wurde kein Element zurückgegeben. myelement war mit GetElementById null.

    AddEvent(myelement, 'click', function () { 
        setAutoComplete(item[0], '\'' + item[1] + '\'', '\'' + parent + '\'', '\'' + idField + '\'') });
     }
 }

Die Funktion AddEvent ist irgendwo definiert, nehme ich an.

Sie wird aber vermutlich als erstes Argument keine HTMLCollection erwarten, sondern ein Objekt, das die Schnittstelle EventTarget implementiert, also zum Beispiel ein Element.

Du musst übrigens nicht innerHTML verwenden, um neue Elemente zu erzeugen. Du kannst auch mit document.createElement('button') einen Button erzeugen, dem die gewünschten Eigenschaften hinzufügen und ihn dann beispielsweise mit appendChild einem anderen Element als Kind zuweisen.

const button = document.createElement('button');
button.type = 'button';
button.textContent = item[1];
button.id = item[0];

//...

div.appendChild(button);

button.addEventListener('click', /* ... */);

Ja, das ist schön, aber als Konstante für eine Schleife? Hattest du einen besonderen Anlass, die Elemente hier als Konstante zu deklarieren?

viele Grüße apfelsine