Avatar billede montago Praktikant
14. februar 2007 - 16:14 Der er 5 kommentarer og
2 løsninger

Crossbrowser Keyhandler / taste funktion

oki... har nørklet med denne lille opgave i 4 dage nu og kaster håndklædet i ringen - !! help me !!

opgaven:

Jeg vil gerne fange tastaturtryk på 'document'
dvs. noget der ligner:

<script>
document.keypress = function(){}
</script>

metododen /handleren skal være crossbrowser kompatibel

mit nuværende eksempel som virker i Internet Explorer til fulde:

-KODE-------------------------------------------------

document.onkeypress = function(){
//  oprindeligt en crossbrowser metode at fange charCode
//    if (!e) var e = window.event;
//    var charCode = (e.charCode) ? e.charCode : ((e.keyCode) ? e.keyCode : ((e.which) ? e.which : 0));

    var charCode;
    if (!e) var e = window.event;
    if (e.keyCode) charCode = e.keyCode;
    else if (e.which) charCode = e.which;

    if( String.fromCharCode(charCode).match(/([\w\d\W\.,\/*\-\+!"#¤%/\(\)\[\{\}\]?=£@$½§^¨~])/) ){ alert( String.fromCharCode(charCode) )}
       
}
document.onkeydown = function(){
//  oprindeligt en crossbrowser metode at fange charCode
//    if (!e) var e = window.event;
//    var charCode = (e.charCode) ? e.charCode : ((e.keyCode) ? e.keyCode : ((e.which) ? e.which : 0));
   
    var charCode;
    if (!e) var e = window.event;
    if (e.keyCode) charCode = e.keyCode;
    else if (e.which) charCode = e.which;
   
    switch(charCode){
        case 27:
    // ESC
alert( String.fromCharCode(charCode) )
            break;
        case 13:
    // ENTER
alert( String.fromCharCode(charCode) )
            break;
        case 8:
    // BACKSPACE
alert( String.fromCharCode(charCode) )
            break;
        case 9:
    // TAB
alert( String.fromCharCode(charCode) )
            break;
        case 45:
    // INS
alert( String.fromCharCode(charCode) )
            break;
        case 35:
    // END
alert( String.fromCharCode(charCode) )
            break;
        case 36:
    // HOME
alert( String.fromCharCode(charCode) )
            break;
        case 46:
    // DEL
alert( String.fromCharCode(charCode) )
            break;
        case 32:
    // SPACE
alert( String.fromCharCode(charCode) )
            break;
        case 39:
    // ARROW RIGHT
alert( String.fromCharCode(charCode) )
            break;
        case 37:
    // ARROW LEFT
alert( String.fromCharCode(charCode) )
            break;
        case 40:
    // ARROW DOWN // Command browser
alert( String.fromCharCode(charCode) )
            break;
        case 38:
    // ARROW UP // Command browser
alert( String.fromCharCode(charCode) )
            break;
    }
}
Avatar billede montago Praktikant
14. februar 2007 - 16:24 #1
ups :p... alle String.fromCharCode() i min Switch skal fjernes... sådan at det kun er charCode som alertes...

dog ikke løsningen...

koden er kun et eksempel
Avatar billede umle-keera Nybegynder
15. februar 2007 - 14:00 #2
Prøv window.onkeydown i stedet.

desuden kan du simplificere keyCode til:
window.onkeypress = function(e) {
e = e || window.event;
alert(e.keyCode);
}
Avatar billede montago Praktikant
15. februar 2007 - 14:31 #3
løsningen skal
1. være crossbrowser
2. virke

Min løsning har for FF og IE (ikke testet opera) været
<body
onkeypress="KeyMan.key_press(event);"
onkeyup="KeyMan.key_up(event)"
onkeydown="KeyMan.key_down(event);">
Avatar billede montago Praktikant
15. februar 2007 - 14:32 #4
function Class_Keymanager(){
    this.key_up = function(e){
        if (!e) var e = window.event;
        var charCode = (e.charCode) ? e.charCode : ((e.keyCode) ? e.keyCode : ((e.which) ? e.which : 0))
           
        if( charCode == 16 )
            Marker.release();
    }
}
Avatar billede montago Praktikant
15. februar 2007 - 14:35 #5
det skal siges at:

onkeypress er den eneste event som kan bruges til at hente tastatur-værdien dvs den aktuelle tast som blev trykket... dvs d=d og D=D osv

onkeydown kaster d=D istedet for...

til gengæld er onkeydown og onkeyup de eneste funktioner som kan bruges til at hente specielle chars som ESC, Shift, CTRL, ALT osv...

MEGET MYSTISK !
Avatar billede umle-keera Nybegynder
15. februar 2007 - 15:42 #6
Det skal så siges at det svar jeg gav dig virker i IE5+, Gecko, Opera, Safari og Konqueror.

Hvorfor du afviser svaret ved jeg ikke. Der var sågar en optimering af din kode ud over et korrekt svar.
Avatar billede montago Praktikant
16. februar 2007 - 00:09 #7
fordi:
dit eksempel ikke virker ikke explore 6.0

i Firefox alerter alle tegn et '0' og shift/ctrl osv fanges ikke
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester