Javascript - Onkeypress event.charCode klopt niet met string

Pagina: 1
Acties:

  • Guillome
  • Registratie: Januari 2001
  • Niet online
Vage titel, vaag probleem :)

Ik heb een string "0123456789,.-";
Die moet op ASCII code gecontroleerd worden met de input van de gebruiker.
Mijn code:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<script>
  var key = null;
  var allowed_keys = "a0123456789.-";
  function save_key(e, obj)
  {
    key = e.keyCode;
  }
  function check_knop(e, obj)
  {
    val = false;
    for (n = 0; n <= allowed_keys.length - 1; n++)
    {
      document.getElementById("shit").value += allowed_keys.toUpperCase().charCodeAt(n) + " == " + key + "\n";
      if (allowed_keys.toUpperCase().charCodeAt(n) == key) { val = true; break; }
    }
    return val;
  }
</script>
<input type="text" onkeydown="save_key(event, this);" onkeypress="return check_knop(event, this);" />
<textarea id="shit" rows=40 cols=50> </textarea>

0 tot 9 gaat goed, alfabet ook (in dit geval alleen om te testen), maar leestekens niet.
Output bij "a":
code:
1
 65 == 65

Output bij "-":
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
65 == 109
48 == 109
49 == 109
50 == 109
51 == 109
52 == 109
53 == 109
54 == 109
55 == 109
56 == 109
57 == 109
46 == 109
45 == 109

Oftewel, de min is bij het EVENT.charCode 109, terwijl de String functie charCode 45 voor de min heeft.
Hoe kan dit? En hoe kan ik dit oplossen? Op een andere manier de 2 vergelijken is ook goed.

If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • André
  • Registratie: Maart 2002
  • Laatst online: 23-04 12:47

André

Analytics dude

Een charCode is anders dan een keyCode ;)

code:
1
2
3
4
5
6
function save_key(e, obj)
{
    var keyCode = e ? e.which : event.keyCode;
    var key = String.fromCharCode(keyCode);
    var charCode = (key).charCodeAt(0);
}

  • Guillome
  • Registratie: Januari 2001
  • Niet online
Wat is het verschil dan?
Eens testen :)

edit
Met deze regel:
key = String.fromCharCode(e.keyCode);

maakt ie van een a een A, en van een - een m, en van een , een ¼
:? 8)7

[ Voor 65% gewijzigd door Guillome op 27-10-2005 18:14 ]

If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • André
  • Registratie: Maart 2002
  • Laatst online: 23-04 12:47

André

Analytics dude

Ja oke, maar check die laatste regel ook even ;)

Het verschil zit hem in het volgende: de keyCode is gerelateerd aan de Unicode equivalent van een toets. Dus als je op de u drukt krijg je keyCode 85 (hoofdletter U, omdat die met die toets verbonden is) en charCode 117 (kleine letter u). Druk je nu shift in krijg je bij beide hetzelfde (85). charCode houdt rekening met het feit of de shift/ctrl/enz is ingedrukt.

[ Voor 80% gewijzigd door André op 27-10-2005 18:25 ]


  • Guillome
  • Registratie: Januari 2001
  • Niet online
Jaaa dat moet ook nog :P :P
Maar dan nog:
code:
1
2
3
4
5
6
7
8
9
10
11
48 == 190
49 == 190
50 == 190
51 == 190
52 == 190
53 == 190
54 == 190
55 == 190
56 == 190
57 == 190
46 == 190

De output met een punt
code:
1
2
3
4
5
6
7
  function save_key(e, obj)
  {
//    key = e.keyCode;
    var keyCode = e ? e.which : event.keyCode;
    var tmpkey = String.fromCharCode(keyCode);
    key = (tmpkey).charCodeAt(0);
  }

[ Voor 3% gewijzigd door Guillome op 27-10-2005 18:24 ]

If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • Guillome
  • Registratie: Januari 2001
  • Niet online
JavaScript:
1
2
3
4
var keyCode = e.keyCode;
var tmpkey = String.fromCharCode(keyCode);
key = (tmpkey).charCodeAt(0);
textareaid.value += "charCode = " + tmpkey + ", Keycode = " + e.keyCode + "\n";

Komt uit met een punt:
code:
1
 charCode = ¾, Keycode = 190

Nogal vaag he

[ Voor 39% gewijzigd door Guillome op 27-10-2005 21:28 ]

If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router


  • Guillome
  • Registratie: Januari 2001
  • Niet online
Huh wat vaag. In een textarea (ook als ik m hier copy paste) is het zo`n 3/4 ( ¾ ) tekentje. Maar na gepost te hebben staate rdus &# 190
Hmmmmmmmmmmm denkt effe goed na

[ Voor 8% gewijzigd door Guillome op 27-10-2005 21:29 ]

If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router

Pagina: 1