Hallo medemensen,
ik ben momenteel bezig met een datumveld, bestaande uit drie invoervelden; de dag, de maand en het jaar. Als je in het invoerveld "dag" 2 tekens invult, dan verspringt de focus automatisch naar het invoerveld "maand", en wordt de tekst in dit veld geselecteerd. Als er in dit veld 2 tekens zijn ingevuld, dan wordt er automatisch versprongen naar het veld "jaar". Dit werkt in principe prima, tenzij de gegevens te snel worden ingevoerd. Er worden dan velden overgeslagen. Als je voor het eerst de velden invoert, dan werkt het naar behoren, maar als je vervolgens vanaf het eerste veld de velden opnieuw invult, waarbij ze dus al zijn ingevuld, dan worden er velden overgeslagen.
Ik heb zelf de indruk dat de tekst te laat wordt geselecteerd met select(). Na het uitvoeren van select() heeft het veld al wel de focus gekregen, maar de tekst is nog niet geselecteerd. Ondertussen drukt de gebruiker al op een knop, en wordt de switchfield() methode uitgevoerd. Omdat de tekst in het veld nog niet was geselecteerd, en de maxlength property van het veld inmiddels al op 2 staat, wordt de waarde van de toetsaanslag door de gebruiker dus niet toegevoegd. Wel wordt er door de functie switchfield genavigeerd naar het volgende invoerveld.
Als dit zo zou zijn, dan weet ik zo geen nette oplossing. (misschien iets met wat lelijke hacks, maar dan veroorzaak je volgens mij meer ellende dan je oplost)
Ik heb een versimpelde versie gemaakt, waarbij dezelfde fout optreedt. Het gaat om de volgende code:
ik ben momenteel bezig met een datumveld, bestaande uit drie invoervelden; de dag, de maand en het jaar. Als je in het invoerveld "dag" 2 tekens invult, dan verspringt de focus automatisch naar het invoerveld "maand", en wordt de tekst in dit veld geselecteerd. Als er in dit veld 2 tekens zijn ingevuld, dan wordt er automatisch versprongen naar het veld "jaar". Dit werkt in principe prima, tenzij de gegevens te snel worden ingevoerd. Er worden dan velden overgeslagen. Als je voor het eerst de velden invoert, dan werkt het naar behoren, maar als je vervolgens vanaf het eerste veld de velden opnieuw invult, waarbij ze dus al zijn ingevuld, dan worden er velden overgeslagen.
Ik heb zelf de indruk dat de tekst te laat wordt geselecteerd met select(). Na het uitvoeren van select() heeft het veld al wel de focus gekregen, maar de tekst is nog niet geselecteerd. Ondertussen drukt de gebruiker al op een knop, en wordt de switchfield() methode uitgevoerd. Omdat de tekst in het veld nog niet was geselecteerd, en de maxlength property van het veld inmiddels al op 2 staat, wordt de waarde van de toetsaanslag door de gebruiker dus niet toegevoegd. Wel wordt er door de functie switchfield genavigeerd naar het volgende invoerveld.
Als dit zo zou zijn, dan weet ik zo geen nette oplossing. (misschien iets met wat lelijke hacks, maar dan veroorzaak je volgens mij meer ellende dan je oplost)
Ik heb een versimpelde versie gemaakt, waarbij dezelfde fout optreedt. Het gaat om de volgende code:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
| <html> <head> <script type="text/javascript"> var input1; var input2; var input3; var input4; var input5; var input6; function init() { input1 = document.getElementById("input1"); input2 = document.getElementById("input2"); input3 = document.getElementById("input3"); input4 = document.getElementById("input4"); input5 = document.getElementById("input5"); input6 = document.getElementById("input6"); } function switchField(currentBox, currentPos) { if (currentBox.value.length == 2) { switch (currentPos) { case 1: input2.select(); break; case 2: input3.select(); break; case 3: input4.select(); break; case 4: input5.select(); break; case 5: input6.select(); break; } } } </script> </head> <body onload="init();"> <input type="text" name="input1" id="input1" onkeyup="switchField(this, 1);" maxlength="2" /> <input type="text" name="input2" id="input2" onkeyup="switchField(this, 2);" maxlength="2" /> <input type="text" name="input3" id="input3" onkeyup="switchField(this, 3);" maxlength="2" /> <input type="text" name="input4" id="input4" onkeyup="switchField(this, 4);" maxlength="2" /> <input type="text" name="input5" id="input5" onkeyup="switchField(this, 5);" maxlength="2" /> <input type="text" name="input6" id="input6" onkeyup="switchField(this, 6);" maxlength="2" /> </body> </html> |