[Javascript] toetsaanslag annuleren

Pagina: 1
Acties:

  • Griffin
  • Registratie: Maart 2003
  • Laatst online: 23-04 08:09

Griffin

Is mythical

Topicstarter
Wat ik wil is als er in een invoervakje een . wordt ingevoerd dat deze actie gecancelled wordt door javascript. Ik heb al uitgezocht dat de . nummer 190 heeft.

Ik heb de volgende code:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<script type="text/javascript">
    window.onload = function()
    {
        document.getElementById('blaat').onkeydown = function(e)
            {
                if (window.event)
                    key=window.event.keyCode;
                else
                    key=e.keyCode;
                    
                if (key == 190)
                    return false;
                else
                    return true;
            }
    }
</script>

Hier zouden dus alle aanslagen geaccepteerd en in het invoervak ingevoerd moeten worden op de . na.
Deze zet internet explorer / FF er doodleuk neer.
Maar als ik de volgende code gebruikt dan werkt het script wel zoals het volgens die code moet werken.
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<script type="text/javascript">
    window.onload = function()
    {
        document.getElementById('blaat').onkeydown = function(e)
            {
                if (window.event)
                    key=window.event.keyCode;
                else
                    key=e.keyCode;
                    
                if (key == 190)
                    alert(key);
                else
                    return true;
            }
    }
</script>


Zo wordt het alertvenster weergegeven met welke KEY er aangeslagen is. dit wordt dus alleen gedaan als ik de . aansla.

Ik heb al gezocht en aan collega's gevraagd. Maar ik krijg het niet werkend.

  • the_stickie
  • Registratie: Juli 2001
  • Laatst online: 14-09-2025
Misschien kan je als de gebruiker een "." typt, gewoon het laatste teken van die string afhalen, zodat het punt alsnog verdwijnt?

[ Voor 21% gewijzigd door the_stickie op 14-11-2005 13:15 ]


  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

The_Stickie schreef op maandag 14 november 2005 @ 13:15:
Misschien kan je als de gebruiker een "." typt, gewoon het laatste teken van die string afhalen, zodat het punt alsnog verdwijnt?
En wat als de cursor in het midden van de string staat?

[ Voor 80% gewijzigd door AtleX op 14-11-2005 13:16 ]

Sole survivor of the Chicxulub asteroid impact.


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

André

Analytics dude

Zoek eens op event.cancelBubble ;)

http://www.quirksmode.org/js/events_order.html

[ Voor 43% gewijzigd door André op 14-11-2005 13:17 ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 14:41

Creepy

Tactical Espionage Splatterer

Javascript \o/ Zie ook Over HTML, CSS, JavaScript, Flash en Director topics *12-05*, zo onzichtbaar is die sticky nu ook weer niet ;)

Move -> W&G

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Het volgende lijkt anders toch erg weinig te doen :? Zowel in IE als in FF komt de . er nog gewoon te staan.
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    <script type="text/javascript">
        window.onload = function()
            {
                document.getElementById('blaat').onkeydown = function(e)
                    {
                        event = (window.event) ? window.event : e;
                        
                        key = event.keyCode;                    
                        
                        if (key == 190)
                            {
                                event.cancelBubble = true;
                        
                                if (event.stopPropagation)
                                    event.stopPropagation();
                            }
                        else
                            return true;
                    }
            }
    </script>

[ Voor 8% gewijzigd door AtleX op 14-11-2005 13:33 ]

Sole survivor of the Chicxulub asteroid impact.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Even "op het oog" (dus niet getest): Welke punt gebruik je? (Numerieke deel, of die uit het alphanumerieke deel?)
Getest, is het niet :P

[ Voor 61% gewijzigd door RobIII op 14-11-2005 13:41 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Die op het numpad geeft geen keycode, die op het normale gedeelte van het toetsenbord geeft als code 190. Nevermind dan :).


Java:
1
2
3
4
5
6
7
8
9
...
if (key == 190)
    {       
        event.cancelBubble = true;
                        
        event.returnValue = false;
        event.cancel = true;
    }
...

^^ werkt ook niet.

[ Voor 53% gewijzigd door AtleX op 14-11-2005 13:45 ]

Sole survivor of the Chicxulub asteroid impact.


  • djexplo
  • Registratie: Oktober 2000
  • Laatst online: 21-12-2025
AtleX schreef op maandag 14 november 2005 @ 13:16:
[...]

En wat als de cursor in het midden van de string staat?
Dan gebruik je gewoon de functie "replace()" om de punt door niks te vervangen.

'if it looks like a duck, walks like a duck and quacks like a duck it's probably a duck'


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

André

Analytics dude

Er schiet me nu wat te binnen: de onkeydown kun je niet cancellen, de onkeypress wel ;)

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

djexplo schreef op maandag 14 november 2005 @ 13:52:
[...]

Dan gebruik je gewoon de functie "replace()" om de punt door niks te vervangen.
Lijkt me toch wel de meest vieze oplossing die er is :X.
André schreef op maandag 14 november 2005 @ 14:17:
Er schiet me nu wat te binnen: de onkeydown kun je niet cancellen, de onkeypress wel ;)
Maar hoe geef je dan aan een onkeypress de key mee? Hij geeft altijd 0 terug als ik alert(key); doe.

Woei, ik heb het \0/

FF en IE compatible:
Java:
1
2
3
4
5
6
7
8
9
10
    <script type="text/javascript">
        window.onload = function()
            {
                document.getElementById('blaat').onkeypress = function(e)
                    {
                        key = (window.event) ? window.event.keyCode : e.which;
                        return (key == 46) ? false : true;
                    }
            }
    </script>

Een alert(key); geeft nu 46 terug als keycode ipv 190. Dat de TS dus wel even aanpassen in zijn script.

[ Voor 144% gewijzigd door AtleX op 14-11-2005 14:47 ]

Sole survivor of the Chicxulub asteroid impact.


  • Griffin
  • Registratie: Maart 2003
  • Laatst online: 23-04 08:09

Griffin

Is mythical

Topicstarter
Dank u :)

PS: AtleX is mede stagair hiero, en daarom heeft ie topic overgenomen :/ (hij is betere in JS dan mijzelf)
maar toch dank ik iedereen _/-\o_

  • dip
  • Registratie: September 2003
  • Laatst online: 16-01-2023

dip

shut up ulé

Wat als er nu iets in het veld geplakt wordt in plaats van dat er iets in getypt wordt..
Dat zul je dan ook moeten afvangen. Of je kiest ervoor het te replacen, je kan dan gelijk kijken welke chars er wel of niet in mogen en zodat het op bijde manieren werkt, zowel plakken als gewoonweg typen. Ik weet niet wat voor data je in dit veld wil zetten, dat heeft natuurlijk ook invloed op je aanpak

It's scientifically known, that base improves the tase of cheezes!


  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Ik neem aan dat het bedoeld is om invoer af te vangen tijdens het typen? In dat geval zou ik, zo werk ik tenminste, voor elk soort veld dat je hebt een reguliere expressie maken, waardoor verkeerde tekens meteen gereplaced worden naar goede. Gewoon in de keypress of keydown, das nog beter, een handler zetten die je invoer vergelijkt met je regex en dan tekens replacen.

Ps. Als je alleen een punt door een komma wilt vervangen, kun je net zo goed gewoon replace doen. Zorg daarna er echter wel voor dat je een regex hebt die bijvoorbeeld meerdere komma's vervangt. Anders heb je er nog niks aan. :)

Fat Pizza's pizza, they are big and they are cheezy


  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Ik heb even zitten zoeken en dit is een stukje uit een replacefunctie.

JavaScript:
1
2
3
4
5
6
7
8
9
10
var regex = new RegExp("^(\\d{7})(\\d)","g");
ret = ret.replace(regex, "$1,$2");
ret = ret.replace(/^(\,|\.)(\d*)/, "0,$2");
ret = ret.replace(/\./, ",");

...

if (ret.length > 10) ret = ret.substr(0, 10);

return ret;
  • Dit stukje code kijkt of een string qua lengte goed is, 10 karakters totaal, 2 achter de komma, en anders wordt de string ingekort.
  • Als je met een punt begint, zet ie er zelf een 0 voor.
  • Punten worden komma's. Hans Kazan is er niks bij. :P
  • En uiteindelijk wordt de complete string op lengte gecontroleerd.

Fat Pizza's pizza, they are big and they are cheezy


  • Griffin
  • Registratie: Maart 2003
  • Laatst online: 23-04 08:09

Griffin

Is mythical

Topicstarter
JKVA schreef op dinsdag 15 november 2005 @ 19:45:
Ik heb even zitten zoeken en dit is een stukje uit een replacefunctie.

JavaScript:
1
2
3
4
5
6
7
8
9
10
var regex = new RegExp("^(\\d{7})(\\d)","g");
ret = ret.replace(regex, "$1,$2");
ret = ret.replace(/^(\,|\.)(\d*)/, "0,$2");
ret = ret.replace(/\./, ",");

...

if (ret.length > 10) ret = ret.substr(0, 10);

return ret;
  • Dit stukje code kijkt of een string qua lengte goed is, 10 karakters totaal, 2 achter de komma, en anders wordt de string ingekort.
  • Als je met een punt begint, zet ie er zelf een 0 voor.
  • Punten worden komma's. Hans Kazan is er niks bij. :P
  • En uiteindelijk wordt de complete string op lengte gecontroleerd.
dank hier gaan we even mee prutsen :D

  • cyberstalker
  • Registratie: September 2005
  • Niet online

cyberstalker

Eersteklas beunhaas

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
window.addEventListener('load', init, false);

function init()
{
    document.getElementById('blaat').addEventListener('keyDown', keyHandler, true);
}

function keyHandler(evt)
{
    if (evt.keyCode==190)
    {
        evt.preventDefault();
    }
}


Dat zou moeten werken.

[ Voor 19% gewijzigd door cyberstalker op 17-11-2005 13:46 ]

Ik ontken het bestaan van IE.


  • Griffin
  • Registratie: Maart 2003
  • Laatst online: 23-04 08:09

Griffin

Is mythical

Topicstarter
@cyberstalker:
Dit heeft te maken met dat de . gedisabled moet worden.

Zo ja dan hoeft het niet meer want momenteel heb ik dat alles geweigerd word behalve de cijfers, komma en de backspace.

het plakken is echter nog een probleem maar hier ga ik nog mee verder

  • twanvl
  • Registratie: Februari 2005
  • Laatst online: 10-11-2025
Is het niet veel makkelijker om zo iets te doen:
code:
1
2
3
function onChange() {
   textvak.value = textvak.value.replace(/\./, "");
}

Dus gewoon zodra er iets veranderd alle punten er uit halen?

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

En IE dan? ;)
twanvl schreef op vrijdag 18 november 2005 @ 00:57:
Is het niet veel makkelijker om zo iets te doen:
code:
1
2
3
function onChange() {
   textvak.value = textvak.value.replace(/\./, "");
}

Dus gewoon zodra er iets veranderd alle punten er uit halen?
True; je zou het zelfs ook pas onsubmit kunnen doen.
Ik zou overigens wel de g-modifier gebruiken voor het geval er meerdere punten vervangen moeten worden.

[ Voor 9% gewijzigd door crisp op 18-11-2005 09:08 ]

Intentionally left blank


  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Die onkeydown code die ik geplaatst heb, is ook puur voor het gemak en om wat sneller en intuitiever te werken. Daarnaast heb ik ook code die de boel controleert in de onchange, daar kun je namelijk volgens mij niet onderuit. Als iemand iets weet om er wel onderuit te komen, dan hoor ik dat ook wel graag. :P

Fat Pizza's pizza, they are big and they are cheezy

Pagina: 1