Fehler wegen zu schneller Verarbeitung?
Hagen
- javascript
Hallo,
folgender Code macht mir ziemlich Kopfschmerzen. Wenn ich an der mit !!!! markierten Stelle einen Alert einbau, funktioniert der Code und befüllt die Combo in meinem Hauptfenster und in meinem Popup. Wenn der Alert nicht da ist, wird nur die Combo im Popup richtig befüllt. Sieht einer von euch eine mögliche Fehlerquelle. Ich glaube nämlich nicht an die Sache mit der zu schnellen Verarbeitung, bin aber mit meinem Latein am Ende.
Gruß und Danke!
JSSelect.prototype.setOptionsByMap=function(opts)
{
var el=this.gID();
var prevVal=el.value;
for(var i=0;i<opts.length;i++) {
var singleOpt=splitComponentStr(opts[i]);
if(el.options[i]==null) {
if(i==0) {
el.options[i]=new Option(singleOpt[1],singleOpt[0]);
} else {
var nopt=el.options[i-1].cloneNode(true);
el.options.appendChild(nopt);
}
}
// !!!!
el.options[i].text=singleOpt[1];
el.options[i].value=singleOpt[0];
}
el.options.length=i;
setFormElementValue(el,prevVal);
}
In einem solchen Fall sollte man zunächst auf die Javascript-Konsole schauen!
Welcher Fehler wird denn dort gemeldet, Zeile und Spalte?
Gruß
Avalon
In einem solchen Fall sollte man zunächst auf die Javascript-Konsole schauen!
Welcher Fehler wird denn dort gemeldet, Zeile und Spalte?
Hallo,
anfangs kam keine Exception. Ein try .. catch hat einen "Unspecified Error" in folgenden Zeilen hervor gebracht.
el.options[i].text=singleOpt[1];
el.options[i].value=singleOpt[0];
Hallo,
anfangs kam keine Exception. Ein try .. catch hat einen "Unspecified Error" in folgenden Zeilen hervor gebracht.
el.options[i].text=singleOpt[1];
el.options[i].value=singleOpt[0];
Genauer gesagt tritt der Fehler in der oberen Codezeile (el.options[i].text=singleOpt[1];) auf. Mit einem try .. catch um genau diese Zeile werden die Einträge in die Combo eingefügt, allerdings wird sie nicht automatisch auf die Länge des längsten Eintrags angepasst.
Gruß, Hagen
el.options[i].text=singleOpt[1];
el.options[i].value=singleOpt[0];
Was sagt den dem DOM-Inspector in der Rubrik "Javascript Objects" zu diesen Objekten?
Gruß
Avalon
Was sagt den dem DOM-Inspector in der Rubrik "Javascript Objects" zu diesen Objekten?
Danke für Deine Hilfe. Konnte mit Hilfe eine andere Möglichkeit finden:
var opt = el.document.createElement( "option" );
opt.text = singleOpt[1];
opt.value = singleOpt[0];
el.options[ i ] = opt;
Nochmals Danke!!!!
Gruß, Hagen
Hi Hagen,
var opt = el.document.createElement( "option" );
opt.text = singleOpt[1];
opt.value = singleOpt[0];
el.options[ i ] = opt;
hab's mir eben nochmal angeguckt. Ich tipp mal drauf, dass die Prüfung auf "null" fehlgeschlagen ist. null gibt's nicht in Javascript. Hab ich dir das nicht schon mal gesagt? ;-)
Gruß,
Martin
PS: für die anderen: Hagen ist ein Kollesche.
Hallo Martin,
hab's mir eben nochmal angeguckt. Ich tipp mal drauf, dass die Prüfung auf "null" fehlgeschlagen ist. null gibt's nicht in Javascript.
Natürlich gibt es "null" in Javascript.
MfG, Mülli
Hi Tobias,
Natürlich gibt es "null" in Javascript.
wenn du "null" verwendest, verwendest du eigentlich ein undefiniertes Objekt.
Gruß,
Martin
Hi Avalon,
Was sagt den dem DOM-Inspector in der Rubrik "Javascript Objects" zu diesen Objekten?
Hagen muss den IE6 nehmen, keinen Firefox.
Gruß,
Martin
Hallo
folgender Code macht mir ziemlich Kopfschmerzen. Wenn ich an der mit !!!! markierten Stelle einen Alert einbau, funktioniert der Code und befüllt die Combo in meinem Hauptfenster und in meinem Popup. Wenn der Alert nicht da ist, wird nur die Combo im Popup richtig befüllt. Sieht einer von euch eine mögliche Fehlerquelle. Ich glaube nämlich nicht an die Sache mit der zu schnellen Verarbeitung, bin aber mit meinem Latein am Ende.
Ich bin auf diesem Gebiet kein Profi, aber ich hatte auch schon das Gefühl, dass sich der Interpreter manchmal "überholt"...
Ich versuchte das zu lösen, indem dort wirklich ein Halt gemacht wird, wie z.B. Dein alert. Du kannst ja auch den unteren Teil in eine separate Funktion und diese window.setTimeout wieder aufrufen, vielleicht geht das.
Aber wie gesagt: es gibt bestimmt bessere, richtigere Lösungen.
Gruss Louis