variablen übergeben
irvine
- javascript
kann jemand helfen?
var field1='';
var field2='';
var filter='';
function key(field1,field2,filter)
{
if (window.event.keyCode == 8)
setTimeout('vervollstaendige(field1,field2,filter);', 1000);
}
function vervollstaendige(field1,field2,filter)
{
alert (field1.value);
}
ergebniss value = undefined
kann jemand helfen?
klar.
var field1='';
var field2='';
var filter='';
function key(field1,field2,filter)
{
if (window.event.keyCode == 8)
setTimeout('vervollstaendige(field1,field2,filter);', 1000);
}
function vervollstaendige(field1,field2,filter)
{
alert (field1.value);
}ergebniss value = undefined
bei mir auch.
field1 ist so wie der Code aussieht ein Leerstring und ein String hat keine Eigenschaft value.
Struppi.
sorry
ich übergebe natürlich Werte aus einem Formular:
onkeyup="key(this,'feld1_fest',ausstattung)"
Deshalb handelt es sich immer noch um Strings,und die haben keine Eigenschaft value
http://selfhtml.teamone.de/javascript/objekte/string.htm
wenn ich aber vor setTimeout
alert (field1.value);
setze funktioniert es aber.
var field1='';
var field2='';
var filter='';
function key(field1,field2,filter)
{
if (window.event.keyCode == 8)
alert (field1.value);
setTimeout('vervollstaendige(field1,field2,filter);', 1000);
}
function vervollstaendige(field1,field2,filter)
{
alert (field1.value);
}
ergebniss value = undefined
setTimeout('vervollstaendige(field1,field2,filter);', 1000);
Dann nimm mal das Semikolon raus....
setTimeout('vervollstaendige(field1,field2,filter)', 1000);
Vielleicht liegt's daran...
leider ist das Ergebnis das gleiche.
if (window.event.keyCode == 8){
alert (field1.value);
setTimeout('vervollstaendige(field1,field2,filter);', 1000);
}
Geschweifte Klammern haben auch gefehlt..wenn's dann nicht geht..keine Ahnung!
Hoppla!
...und natürlich...
window.setTimeout('vervollstaendige(field1,field2,filter);', 1000);
String funktioniert nicht mit value!
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
vielen Dank für die ausfürliche Erklärung.
Variante 1 hat mich schon zum Ziel gebracht.
mfg Irvine
Hab dir nochmal den Code per Mail geschickt.
Danke Irvine