Wo besteht hier der Unterschied?

meilon

Erfahrenes Mitglied
Hi,
Ich habe follgende 2 Sachen geschrieben:
Code:
<tr><td><input type="text" name="artnr1" onKeyUp="document.wab.artbez1.value = Artikel[this.value]['Bez']; alert(this.value);" style="width: 60;"></td><td><input type="text" name="artbez1" style="width: 225;" readonly></td></tr>

<tr><td><input type="text" name="artnr1" onKeyUp="alert(this.value); document.wab.artbez1.value = Artikel[this.value]['Bez']; " style="width: 60;"></td><td><input type="text" name="artbez1" style="width: 225;" readonly></td></tr>
Beim ersten wird erst mit einer Zeichenlänge von 5 Zeichen die alert ausgegeben, beim 2. immer. Aber ich brauche es hinteher. (Natürlich nicht den Alert, sondern etwas anderes mit this.value.length)

Worin besteht der Unterschied?

Hier noch ein bisschen Array für euch zum testen:
Code:
Artikel = new Array();
Artikel[80113] = new Array();
Artikel[80113]["Bez"] = "Tischkopierer Canon PC-7";
Artikel[80120] = new Array();
Artikel[80120]["Bez"] = "Diktiergerät Philips Pocket";
mfg
 
Ich sehe dort keinen Unterschied.... wenn man die alerts entfernt, sin beide Zeilen absolut identisch.
Du müsstest etwas konkreter werden.
 
Ich weiß nicht was ich noch beschreiben soll ;(

Das 1. Beispiel:
Ich lade die Seite, gebe in der Input Box etwas ein, und nach dem 5. eingegebenen Zeichen kommt die alert. Danach ist es wieder "still"

Das 2. Beispiel:
Ich lade die Seite, gebe in der Input Box etwas ein, und nach jedem eingegebenen Zeichen kommt die alert. Und zwar immer.

Warum ich das dahinter haben will? Wie man sieht wird mit der eingabe einer Artikelnummer ein Feld mit der Artikelbezeichnung gefüllt. Aber ich möchte schauen, ob die ArtNr. 5 Zahlen enthält, ansonsten soll das ArtBez Feld gelehrt werden.

mfg
 
ob da nun noch im alert ein .lenght hintersteht oder nicht, ist jetzt egal. Fakt ist, beim ersten kommt erst beim 5. Zeichen eine Meldung, beim anderen immer.

Und ich möchte wissen warum das so ist. Hat jemand diesen Code schon bei sich getestet?

mfg
 
Benutze mal die JS-Konsole, dann siehst du, was passiert.
Gibt man in artnr1 etwas ein, wozu du in "Artikel[]" nix hast, erzeugt das einen JS-Fehler.... weil du auf ein nicht vorhandenes Objekt zugreifst.

Dieser Fehler entsteht in der ersten Zeile vor dem alert()... weshalb dieser alert() dann nicht mehr berücksichtigt wird... in der 2. Zeile wird erst der alert() ausgegeben... dann kommt der Fehler.

Mit der Anzahl der Zeichen hat das nur indirekt zu tun... wenn du nur 5stellige Arrayschlüssel hast, gibts in der 1. Zeile logischerweise solange Fehler, bis 5 Zeichen eingegeben wurden.
Aber auch bei 5 Zeichen gibts nen Fehler, wenn das dazugehörige Arrayelement nicht existiert.

Bevor du auf den Array zugreifst, prüfe per typeof(), ob das entsprechende Element existiert... dann gibts keine Fehler.
 
Könntest du mir sagen, wie ich das Abfragen soll? Weder
Code:
onKeyUp="if(typeof(Artikel[this.value]['Bez']) == true) {document.wab.artbez1.value = Artikel[this.value]['Bez'];} alert(this.value.length);"
noch
Code:
onKeyUp="if(typeof(Artikel[this.value]['Bez'])) {document.wab.artbez1.value = Artikel[this.value]['Bez'];} alert(this.value.length);"
hat geklappt.
 
typeof() gibt undefined zurück, wenn das Objekt nicht existiert:

Code:
if(typeof(Artikel[this.value]!='undefined')) {....weiter gehts}
 
Ich habe das jetzt hier:
Code:
 onKeyUp="if(typeof(Artikel[this.value]!='undefined')) {document.wab.artbez1.value = Artikel[this.value]['Bez'];} alert(this.value.length);"
Aber der alert kommt immernoch erst beim 5. Zeichen.
 
Oh, Sorry... so ists richtig:
Code:
onKeyUp="if(typeof Artikel[this.value]!='undefined'){...weiter machen}

Wenn der Wert dann nicht in artbez1 eingetragen wird, liegt das daran, dass du 2 Stck. davon hast.
 

Neue Beiträge

Zurück