Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[JS] Input filteren voor deze op het scherm komt

Pagina: 1
Acties:

  • Bozozo
  • Registratie: Januari 2005
  • Laatst online: 20-02 16:10

Bozozo

Your ad here?

Topicstarter
Ik ben bezig aan kleuren-maak-dinges, en vlak voor de eindstreep loop ik tegen een klein probleem aan. Je kunt een hexadecimale kleurencode invoeren, die vervolgens wordt geëvalueerd. Ik wil dat het onmogelijk is om iets anders in te voeren dan 0-9a-z (case insensitive).
Momenteel replace ik met een regular expression alles behalve 0-9a-z in input.value door "". Dat werkt wel, maar als je nu een letter typt dan zie je hem even verschijnen en dan weer verdwijnen. Geen gezicht natuurlijk. Bekijk even het testje en je ziet meteen wat ik bedoel.

Testsite: Color Picker Test

In een notendop: Is het mogelijk om via javascript bepaalde toetsaanslagen te negeren in een text input veld?

TabCinema : NiftySplit


  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 18-11 20:57
Dat is mogelijk ja, je moet het onkeydown-event afvangen, en dan de bijbehorende keycode opzoeken. Als de keycode dan niet overeenkomt met 0-9, A-F of a-f, dan kun je het event annuleren met return false.

ppk geeft een goede uitleg over events op www.quirksmode.org, goed leesvoer ;)

We are shaping the future


  • Bozozo
  • Registratie: Januari 2005
  • Laatst online: 20-02 16:10

Bozozo

Your ad here?

Topicstarter
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
function CharPressed(e) {
     if(e) e = e;
     else e = window.event;
     if(e.which) var keycode = e.which;
     else var keycode = e.keyCode;
     return String.fromCharCode(keycode);
}
function checkkey(e) {
    var key = CharPressed(e);
    var reg = /[^a-f0-9]/gi;
    return !reg.test(key);
}

HTML:
1
<input type="text" id="cposbox" maxlength="6" value="000000" onkeydown="return checkkey(event)" onkeyup="enterhex()" />


Als ik de return value van checkkey alert dan geeft hij netjes true en false afhankelijk van de ingetikte letter, maar het event wordt niet geblokt :|

edit: onkeydown="checkkey(event)" veranderd naar onkeydown="return checkkey(event)". Nu wordt steeds één slechte keydown geblokkeerd, maar de volgende komt erdoor.

Ik debug nog even verder ;)

[ Voor 13% gewijzigd door Bozozo op 04-11-2007 19:06 ]

TabCinema : NiftySplit


  • b19a
  • Registratie: September 2002
  • Niet online
Bozozo schreef op zondag 04 november 2007 @ 18:51:
edit: onkeydown="checkkey(event)" veranderd naar onkeydown="return checkkey(event)". Nu wordt steeds één slechte keydown geblokkeerd, maar de volgende komt erdoor.
Ik neem aan dat je bedoelt als ik "a" ingedruk dan verschijnt na een tijdje "aaaa". De eerste a wordt geblokt, maar de "aaa" daarna niet. De volgende rij events worden afgevuurd tijdens "aaaa":
[onkeydown] [onkeypressed] [onkeypressed] [onkeypressed] [onkeypressed] [onkeyup]

Ik denk dat je er nu wel uit komt :).

  • Bozozo
  • Registratie: Januari 2005
  • Laatst online: 20-02 16:10

Bozozo

Your ad here?

Topicstarter
Nope, het probleem had met focus te maken. Inmiddels is het verholpen.

Ik heb het testbestand ook ge-update, zodat geïnteresseerden in de bron kunnen kijken. Wel erg veel code voor erg weinig beeld, maar vooruit maar :)

Bedankt voor de hulp!

edit: het is helaas nog wel mogelijk om !@#$% enzo te typen, omdat die dezelfde keycode hebben als 1234567. Het zij zo... ik geloof het wel
laatste probleem is dat num lock niet helemaal werkt, maar dat zal me echt een zorg zijn :P

[ Voor 33% gewijzigd door Bozozo op 04-11-2007 21:30 ]

TabCinema : NiftySplit