irvine: variablen übergeben

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

  1. 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.

    1. sorry
      ich übergebe natürlich Werte aus einem Formular:

      onkeyup="key(this,'feld1_fest',ausstattung)"

      1. Deshalb handelt es sich immer noch um Strings,und die haben keine Eigenschaft value

        http://selfhtml.teamone.de/javascript/objekte/string.htm

        1. 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

          1. setTimeout('vervollstaendige(field1,field2,filter);', 1000);

            Dann nimm mal das Semikolon raus....

            setTimeout('vervollstaendige(field1,field2,filter)', 1000);

            Vielleicht liegt's daran...

            1. leider ist das Ergebnis das gleiche.

              1. 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!

                1. Hoppla!
                  ...und natürlich...

                  window.setTimeout('vervollstaendige(field1,field2,filter);', 1000);

  2. String funktioniert nicht mit value!

  3. 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

    1. vielen Dank für die ausfürliche Erklärung.
      Variante 1 hat mich schon zum Ziel gebracht.
      mfg Irvine

    2. Hab dir nochmal den Code per Mail geschickt.
      Danke Irvine