Hallo irvine,
na dann möchte ich einmal etwas Klarheit in das Geheimnis bringen
var field1='';
var field2='';
var filter='';
hier definierst du drei globale Variablen als Strings
onkeyup="key(this,'feld1_fest',ausstattung)"
hier ist der Aufruf deiner Funktion, der übergibst du das Formularelement, einen String und offensichtlich ein weiteres Element
function key(field1,field2,filter)
jetzt zu deinem ersten Problem. Deine Parameter heißen genauso wie die globalen Variablen. Parameter sind aber immer lokale Variablen. Werte von lokalen Variablen haben den Vorrang für Werte von globalen Variablen.
Das heißt, nur innerhalb dieser Funktion haben die lokalen Variablen einen anderen Wert als die globalen und in deinem Beispiel enthält die Variable field1 eben das Formularelement. Deshalb klappt das alert() auch.
setTimeout('vervollstaendige(field1,field2,filter);', 1000);
Dein nächstes Problem ist diese Zeile. setTimeout unterbricht nicht den Programmablauf, sondern verzögert nur den Aufruf der notierten Befehlskette. Diese kommt erst zur Ausführung, wenn die Funktion schon lange beendet ist. Die Inhalte deiner Variablen, die du hier übergibst entsprechen jetzt nicht mehr dem lokalen sondern dem globalen Werten und das sind Leerstrings und ein Leerstring kennt die Eigenschaft value nicht.
Abhilfe:
Variante 1: du benennst deine Parameter um und weißt den globalen Variablen die jeweiligen Werte zu.
var field1='';
var field2='';
var filter='';
function key(para1,para2,parafilter)
{
field1 = para1;
field2 = para2;
filter = parafilter;
if (window.event.keyCode == 8)
setTimeout('vervollstaendige(field1,field2,filter);', 1000);
}
Nachteil: bei einem mehrfachen Aufruf der Funktion werden die globalen Variablen stets überschrieben.
Variante 2: du berechnest den setTimeout-String und übergibst ihn die aktuellen Werte, der jeweiligen Elemente (ich gehe mal davon aus, das filter ein Input-Feld ist)
setTimeout('vervollstaendige('+field1.value+','"' + field2 +'",'+filter.value+');', 1000);
Nachteil: Änderungen, die innerhalb der eine Sekunde Wartezeit gemacht werden gehen verloren
Variante 3: du berechnest den setTimeout-String und übergibst ihn die Feldnamen:
setTimeout('vervollstaendige('+field1.name+','"' + field2 +'",'+filter.name+');', 1000);
Nachteil: in deiner Ausführungsfunktion muss das Element neu bestimmt werden
Variante 4: du übergibst der Methode setTimeout nur den Funktionnamen und nach der Zeitangabe die notwendigen Parameter:
setTimeout(vervollstaendige, 1000,field1,field2,filter);
Nachteil: das geht weder im IE noch in Opera, sondern ausschließlich in Mozilla und im Netscape 4.x
Viele Grüße
Antje