NEWS
Frage zu Script [gelöst]
-
Hallo,
ich habe folgendes gebastelt.
var idPWD_Soll = "javascript.0.PasswortService"; //gespeichtertes Passwort - String var idPWD_Ist = "javascript.0.PasswortServiceEingabe"; //String var idTriggerKeyboard = "javascript.0.Trigger_Keyboard"; //Bool var idKeyboardEingabe = "javascript.0.KeyboardTaste"; // Zahl var idSternAnzeige = "javascript.0.SternAnzeige"; //Zahl on(idKeyboardEingabe, function(dp) { if ((getState(idSternAnzeige).val === 0) && getState(idKeyboardEingabe).val !== 13){setState(idSternAnzeige, 1);} if ((getState(idSternAnzeige).val === 1) && getState(idKeyboardEingabe).val !== 13){setState(idSternAnzeige, 2);} if ((getState(idSternAnzeige).val === 2) && getState(idKeyboardEingabe).val !== 13){setState(idSternAnzeige, 3);} if ((getState(idSternAnzeige).val === 3) && getState(idKeyboardEingabe).val !== 13){setState(idSternAnzeige, 4);} if ((getState(idSternAnzeige).val === 4) && getState(idKeyboardEingabe).val !== 13){ setState(idPWD_Ist, ""); setState(idKeyboardEingabe, 13); setState(idSternAnzeige, 0); } switch (getState(idKeyboardEingabe).val) { case 0: setState(idPWD_Ist, getState(idPWD_Ist).val + "0"); setState(idKeyboardEingabe, 13); log("Tste 0"); break; case 1: setState(idKeyboardEingabe, 13); break; case 2: setState(idKeyboardEingabe, 13); break; case 3: setState(idKeyboardEingabe, 13); break; case 4: setState(idKeyboardEingabe, 13); break; case 5: setState(idKeyboardEingabe, 13); break; case 6: setState(idKeyboardEingabe, 13); break; case 7: setState(idKeyboardEingabe, 13); break; case 8: setState(idKeyboardEingabe, 13); break; case 9: setState(idKeyboardEingabe, 13); break; case 10: setState(idKeyboardEingabe, 13); break; case 11: setState(idPWD_Ist, ""); setState(idTriggerKeyboard, false); setState(idKeyboardEingabe, 13); setState(idSternAnzeige, 0); break; case 12: setState(idPWD_Ist, ""); setState(idKeyboardEingabe, 13); setState(idSternAnzeige, 0); break; } }); // Script start setState(idPWD_Ist, ""); setState(idTriggerKeyboard, false); setState(idKeyboardEingabe, 13); setState(idSternAnzeige, 0);
Mein Problem ist dieser Teil
if ((getState(idSternAnzeige).val === 4) && getState(idKeyboardEingabe).val !== 13){ setState(idPWD_Ist, ""); setState(idKeyboardEingabe, 13); setState(idSternAnzeige, 0); }
Er führt das zwar aus, aber danach trotzdem den Case für idKeyboardEingabe, obwohl ich die Variable schon auf 13 gesetzt habe. Ist das vielleicht ein zeitliches Problem, weil ich die Variable idKeyboardEingabe nur ein Paar Zeilen vorher geändert habe und sie dann wieder abfrage ? Brauch er vielleicht mehr Zeit um die Variable erst zu schreiben ?
Gruß.
ToBo
PS: Ich habe das Script im ein View mit einem Keypad einzublenden und die Tastenklicks auszuwerten.
-
OK, hat sich schon erledigt. Habe die ganze Case Geschichte in ein SetTimeout von 400ms gesetzt. Nun gehts
setTimeout(function() { switch (getState(idKeyboardEingabe).val) { case 0: setState(idPWD_Ist, getState(idPWD_Ist).val + "0"); setState(idKeyboardEingabe, 13); log("Tste 0"); break; case 1: setState(idPWD_Ist, getState(idPWD_Ist).val + "1"); setState(idKeyboardEingabe, 13); break; case 2: setState(idPWD_Ist, getState(idPWD_Ist).val + "2"); setState(idKeyboardEingabe, 13); break; case 3: setState(idKeyboardEingabe, 13); break; case 4: setState(idKeyboardEingabe, 13); break; case 5: setState(idKeyboardEingabe, 13); break; case 6: setState(idKeyboardEingabe, 13); break; case 7: setState(idKeyboardEingabe, 13); break; case 8: setState(idKeyboardEingabe, 13); break; case 9: setState(idKeyboardEingabe, 13); break; case 10: setState(idKeyboardEingabe, 13); break; case 11: setState(idPWD_Ist, ""); setState(idTriggerKeyboard, false); setState(idKeyboardEingabe, 13); setState(idSternAnzeige, 0); break; case 12: setState(idPWD_Ist, ""); setState(idKeyboardEingabe, 13); setState(idSternAnzeige, 0); break; } }, 400);
Ich wusste nicht, das er noch Zeit braucht um die Variablen zu schreiben. Wenn nun nach dem 4. Stern eine Taste gedrückt wird, gehts wieder von vorn los und die Variable wird auch wirklich leer gemacht.
-
Und wenn Du jetzt noch ein [gelöst] in den Betreff schreiben könntest.
-
Und wenn Du jetzt noch ein [gelöst] in den Betreff schreiben könntest. `
Jawoll, das werde ich natürlich machen. Wüsste aber gern noch etwas von den Profis über diese zeitlicheVerzögerung.
Gruß.
ToBo
-
liegt imho am asynchronen arbeiten
-
liegt imho am asynchronen arbeiten `
Also ist ein Delay die einzige Möglichkeit eine Variable abzufragen, wenn man sie ein Paar Zeilen vorher geändert hat? Damit genug Zeit bleibt, dass die Variable auch wirklich geändert wurde.