Tach!
var anzahl = data_ar.length;
var i;
for ( i=0; i<=anzahl; i++ ) {
if(data_ar[i].value == v){break;}
}
Wenn du 3 Elemente in einem Array hast, das mit 0 beginnend nummeriert wird, dann sind die Keys: 0, 1, 2. anzahl ist 3 und damit 1 größer als der größte Key. Wenn du durchläufst, dann bis vor den Wert von anzahl: i < anzahl
.
Besser ist es, ohne die Hilfsvariable i auszukommen. Array hat die Methode forEach(). Dummerweise ist data_ar aber gar kein Array, sondern nur eine HTMLCollection. Was die Key-Nummerierung angeht, stimmt die mit Arrays überein, aber es fehlen die Methoden, die das Array-Objekt mitbringt. Deshalb muss man sie erstmal in ein Array umformen, was mit Array.from() geht.
Array.from(data_ar).forEach(value => ...);
Eigentlich möchtest du gar nicht über das Array / die HTMLCollection iterieren, sondern nur wissen, ob ein bestimmter Wert enthalten ist. Das kann man eleganter lösen. Dabei gibt es aber das Problem, dass der gesuchte Wert in einer Eigenschaft der HTMLCollection-Elemente steckt, und da erstmal extrahiert werden muss. Zunächst erfolgt die Konvertierung in ein Array, dann erzeugen wir mit .map()
eine Liste der Values. .map()
konvertiert die Werte eines Arrays in andere Werte. Das Konvertieren übernimmt die übergebene Funktion für jeweils einen Wert.
Array.from(data_ar).map(option => option.value)
oder in herkömmlich ausführlich:
Array.from(data_ar).map(function (option) {
return option.value;
});
Und dann kann .includes() herausfinden, ob der gesuchte Wert vorhanden ist.
Array.from(data_ar).map(option => option.value).includes(v);
(Wenn man nicht auf den IE und andere Altbrowser (ESR-Varianten) verzichten kann, braucht es für .from() und .inludes() noch ein Polyfill.)
Rückgabewert dieses Konstrukts ist jedenfalls true oder false, was dann mit if ausgewertet werden kann.
data_arr müsste auch mal einen ordentlichen Namen bekommen, beispielsweise options, denn solche sind es ja.
aber... in beiden Fällen nur, wenn ich break; nutze. Sonst wird nach der Schleife gar nichts ausgeführt.
Da wird es wohl eine Fehlermeldung geben, die zum Abbruch führt. Wenn du auf Eigenschaften von Elementen zugreifst, die nicht existieren, dann greifst du auf Eigenschaften von undefined zu, und das hat keine.
dedlfix.