IE 5.0 kennt document.form.selectbox.length nicht?
Grag Smithers
- javascript
Hallo Leute,
ich versuche via folgender Schleife alle Einträge erst zu löschen und dann aus einem Array spezielle Einträge wieder einzufügen:
function _change() {
for (i = 0; i <= document.frmNavAdd.position.length; i++) {
document.frmNavAdd.position.options[document.frmNavAdd.position.length-1] = null;
}
if (_data[document.frmNavAdd.category.value] != undefined) {
for (i = 0; i < _data[document.frmNavAdd.category.value].length; i++) {
_obj = new Option(_data[document.frmNavAdd.category.value][i]["label"],_data[document.frmNavAdd.category.value][i]["id"],false,true);
document.frmNavAdd.position.options[document.frmNavAdd.position.length] = _obj;
}
} else {
_obj = new Option('<Category is empty>',0,false,false);
document.frmNavAdd.position.options[document.frmNavAdd.position.length] = _obj;
}
}
Wenn jemand rat weiss bin ich sehr dankbar über jede hilfe, :-)
Grag
Hallo Grag,
function _change() {
Namen müssen in Javascript mit einem Buchstaben beginnen.
for (i = 0; i <= document.frmNavAdd.position.length; i++) {
for (i = 0; i < document.frmNavAdd.position.length; i++) {
document.frmNavAdd.position.options[document.frmNavAdd.position.length-1] = null;
}
Warum nicht
for (i=document.frmNavAdd.position.length-1; i >= 0; i--)
document.frmNavAdd.position.options[i] = null;
Grüße
Andreas
Hallo Andreas,
super das scheint schonmal funktioniert zu haben. Allerdings sagt er mir jetzt 'undefined ist undefiniert'. Das liegt wohl an meiner hingefrickelten lösung der Condition.
Fällt dir eine bessere alternative als:
if (_data[document.frmNavAdd.category.value] != undefined) {
ein?
Zur Erklärung:
es geht um einen Navigations-Manager, man wehlt erst die Kategorie aus in der man einen neuen Navi-Punkt anlegen möchte (z.b. Produkte) und die Positions-Selectbox (z.b. nach MP3-Player, nach CD-Wechsler, etc) ändert sich halt ohne nachladen je nachdem in welcher Kategorie man diesen Punkt anlegen will. (das alles steckt im Array _data)
Gruß,
Grag
Hallo Grag,
function _change() {
Namen müssen in Javascript mit einem Buchstaben beginnen.
for (i = 0; i <= document.frmNavAdd.position.length; i++) {
for (i = 0; i < document.frmNavAdd.position.length; i++) {
document.frmNavAdd.position.options[document.frmNavAdd.position.length-1] = null;
}Warum nicht
for (i=document.frmNavAdd.position.length-1; i >= 0; i--)
document.frmNavAdd.position.options[i] = null;Grüße
Andreas
Hallo Grag,
super das scheint schonmal funktioniert zu haben. Allerdings sagt er mir jetzt 'undefined ist undefiniert'. Das liegt wohl an meiner hingefrickelten lösung der Condition.
Fällt dir eine bessere alternative als:
if (_data[document.frmNavAdd.category.value] != undefined) {
ein?
Hierzu zwei Anmerkungen:
Grüße
Andreas
Hallo Andreas,
Hierzu zwei Anmerkungen:
- _data: Auch Array-Namen müssen mit einem Buchstaben beginnen.
Hatte ich schon geändert, nur noch nicht beachtet beim schreiben. ;-)
- undefined wird als Variablenname betrachtet und eine Variable dieses Namens existiert nicht. Was Du willst ist eine Abfrage, ob der Wert null ist.
Jein. Am liebsten würde ich if (is_array(data[...]) {} nehmen, aber das geht ja leider nicht bei JS. Gibt es sonst eine gute methode um zu prüfen ob entsprechendes ein Array ist ausser if (data[...] == null) {}? (habe nichts in der Reference gefunden, oder bin ich Blind?)
Gruß,
Grag
P.S.: related link gelesen ;-)
Hallo Grag,
Jein. Am liebsten würde ich if (is_array(data[...]) {} nehmen, aber das geht ja leider nicht bei JS. Gibt es sonst eine gute methode um zu prüfen ob entsprechendes ein Array ist ausser if (data[...] == null) {}? (habe nichts in der Reference gefunden, oder bin ich Blind?)
Es gibt "typeof" http://selfhtml.teamone.de/javascript/sprache/operatoren.htm#typeof. Allerdings liefert
var a = new Array();
alert(typeof a);
als Ergebnis nicht array, sondern object. Ich hatte Dich allerdings so verstanden, dass Du wissen wolltest, ob ein bestimmetes Array-Element einen Wert enthält.
P.S.: related link gelesen ;-)
Und gleich angewendet :-)
Grüße
Andreas
Hallo,
- _data: Auch Array-Namen müssen mit einem Buchstaben beginnen.
Variablennamen duerfen auch mit einem Unterstrich beginnen, was auch fuer Arrays zutrifft.
var _x=new Array(1,2,3);
alert(_x[1]); // 2
- undefined wird als Variablenname betrachtet und eine Variable dieses Namens existiert nicht.
Man kann durchaus auf undefined pruefen, sofern es die Variable an sich bereits gibt (auf obiges Beispiel bezogen):
if(_x[2]!=undefined)alert("_x[2] hat bereits einen Wert");
if(_x[3]==undefined)alert("_x[3] hat noch keinen Wert");
MfG, Thomas
Hallo Thomas,
Variablennamen duerfen auch mit einem Unterstrich beginnen, was auch fuer Arrays zutrifft.
Vielleicht hast Du Recht. Meine Informationen stammen aus http://selfhtml.teamone.de/javascript/sprache/regeln.htm#namen. Dort steht:
"... sie dürfen nur aus Buchstaben und Ziffern bestehen - das erste Zeichen muss ein Buchstabe sein; es sind Groß- und Kleinbuchstaben erlaubt. Groß- und Kleinschreibung werden unterschieden!"
- undefined wird als Variablenname betrachtet und eine Variable dieses Namens existiert nicht.
Man kann durchaus auf undefined pruefen, sofern es die Variable an sich bereits gibt
Ich dachte, die Abfrage auf undefined funktioniert nur im Zusammenhang mit typeof. Aber da lag ich wohl falsch. Allerdings legt die Fehlermeldung "undefined ist undefiniert" den von mir gezogenen Schluß, dass undefined als Variable interpretiert wird nahe.
Grüße
Andreas
Hallo,
Vielleicht hast Du Recht. Meine Informationen stammen aus http://selfhtml.teamone.de/javascript/sprache/regeln.htm#namen. Dort steht:
"... sie dürfen nur aus Buchstaben und Ziffern bestehen - das erste Zeichen muss ein Buchstabe sein; es sind Groß- und Kleinbuchstaben erlaubt. Groß- und Kleinschreibung werden unterschieden!"
Der auf JavaScript aus Netscape 2.0 und JScript aus IE 3.0 basierende ECMA-Standard erlaubt Unterstriche "anywhere in an identifier" (http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf).
CSS-Bezeichner (class, id) muessen dagegen mit einem Buchstaben beginnen und der Unterstrich wurde im Rahmen eines Errata-Dokuments auch darin fuer zulaessig erklaert.
Ich dachte, die Abfrage auf undefined funktioniert nur im Zusammenhang mit typeof. Aber da lag ich wohl falsch.
Mit typeof() ist eine Pruefung noch besser, weil dann auch undefined geliefert wird, wenn die Variable noch nicht mittels var deklariert wurde.
MfG, Thomas
Hallo Thomas,
Der auf JavaScript aus Netscape 2.0 und JScript aus IE 3.0 basierende ECMA-Standard erlaubt Unterstriche "anywhere in an identifier" (http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf).
Danke für den Link. Ich werde es mir in den nächsten Tagen mal genauer ansehen.
Mit typeof() ist eine Pruefung noch besser, weil dann auch undefined geliefert wird, wenn die Variable noch nicht mittels var deklariert wurde.
Gut zu wissen.
Grüße
Andreas