Avatar billede sluppermanden Nybegynder
14. juni 2006 - 22:06 Der er 4 kommentarer og
2 løsninger

Kan men kende forskel på Ctrl og Alt Gr

Hej,

Jeg har et lille problem med at kende forskel på hvilken knap der er trykket ned.

Ctrl og Alt Gr har begge event.keyCode=17 og i begge tilfælde er event.ctrlKey = true.

Nogen der ved hvordan jeg finder ud af om det er den ene eller den anden der er trykket ned?
Avatar billede nyp Nybegynder
15. juni 2006 - 00:06 #1
Alt Gr er en sammenblanding af Ctrl og Alt

function touchAlt(Event) {
  if (window.event) {
    return (window.event.altKey);
  } else {
    return (Event.altKey || (Event.modifiers % 2));
  }
}

function touchCtrl(Event) {
  if (window.event) {
    return (window.event.ctrlKey);
  } else {
    return (Event.ctrlKey || (Event.modifiers==2) || (Event.modifiers==3) || (Event.modifiers>5));
  }
}


if (touchCtrl(Event) && touchAlt(Event))    alert("Alt Gr")
Avatar billede qumle Nybegynder
15. juni 2006 - 10:44 #2
jeg har det samme problem.

så vidt jeg kan se på din kode så forventer du at en alt gr giver både ctrlKey og altKey, og på den måde kan du skelne, det kan jeg ikke helt få til at virke efter jeg har kopieret din kode.

document.onkeydown = keypressed;

function touchAlt(Event) {
  if (window.event) {
    return (window.event.altKey);
  } else {
    return (Event.altKey || (Event.modifiers % 2));
  }
}

function touchCtrl(Event) {
  if (window.event) {
    return (window.event.ctrlKey);
  } else {
    return (Event.ctrlKey || (Event.modifiers==2) || (Event.modifiers==3) || (Event.modifiers>5));
  }
}


function keypressed(){
    Event = window.event;
    if (touchCtrl(Event) && touchAlt(Event)){alert('Alt Gr pressed')}
    else if (touchCtrl(Event)){alert('Control pressed')}
}


måske er der lige nogle småting omkring den måde jeg har oprettet eventhandleren.

jeg har to spørgsmål til din kode

1. du tager et Event som input til touch metoderne, men checker alligevel på om der findes et event i window. Hvorfor? hvad er forskellen på de to events

2. hvad betyder Event.modifiers, og hvilken relevans har det i dette tilfælde?
Avatar billede nyp Nybegynder
15. juni 2006 - 12:24 #3
1. eller virker det ikke i FF, hvorfor har jeg ikke tænkt nærmere over, jeg har ikke opfundet koden.
2. Ved det ikke og det virker også uden.

Det ser ud som om der er en forsinkelse inden den finder ud af at både Alt og Ctrl er rørt så når du tilføjer en "else if (touchCtrl(Event)){alert('Control pressed')}" så kommer der kun alert for Ctrl, hvis du holder Alt Gr nede og klikke ok med musen viser den at Alt gr knappen er nede anden gang, måske det hjælper at sætte en tidsforsinkelse ind?

Nedenstående uden "else if (touchCtrl(Event)){alert('Control pressed')}" giver kun alert når Alt Gr er nede.


<html>
<head>
<title>Alt Gr</title>
<script type="text/javascript">
document.onkeydown = keyDown;

function touchAlt(Event) {
  if (window.event) {
    return (window.event.altKey);
  } else {
    return (Event.altKey);
  }
}

function touchCtrl(Event) {
  if (window.event) {
    return (window.event.ctrlKey);
  } else {
    return (Event.ctrlKey);
  }
}


function keyDown(Event)
{
if (touchCtrl(Event) && touchAlt(Event))    alert("Alt Gr");
}
</script>
</head>

<body>
</body>
</html>
Avatar billede nyp Nybegynder
15. juni 2006 - 12:51 #4
Avatar billede qumle Nybegynder
15. juni 2006 - 14:23 #5
hmm jeg kunne ikke helt forstå det så jeg gik lige et skridt tilbage og lavede lidt research

jeg lavede en blank html side med dette javascript

<script language="javascript">
document.body.onkeydown = keydownhandler
function keydownhandler(){
    eventObj = window.event;
    alert('keyCode = '+eventObj.keyCode+'\ncontrol = '+eventObj.ctrlKey + '\ncontrol left = '+eventObj.ctrlLeft+'\nalt = '+eventObj.altKey+'\naltLeft = '+eventObj.altLeft);
}
</script>

this script writtes the keycode of the presed key and the four properties of the event object that says whether the control, leftcontrol, alt, altLeft is pressed.

efter at have testet lidt med nogle forskellige taste kombinationer kom jeg frem til følgende:

et tryk på "alt Gr" giver nøjagtig det samme event som et tryk på left control
dvs
event.keyCode = 17
event.ctrlKey = true
event.ctlLeft = true
event.altKey = false
event.altLeft = false

hvis Alt GR derimod holdes nede mens der trykkes på en anden knap så er properties følgende
event.keyCode = [keycode for anden knap]
event.ctrlKey = true
event.ctlLeft = true
event.altKey = true
event.altLeft = false

nu er der trykket på alt.

det fik mig til at indse at et tryk på alt gr alene er fuldstændig identisk med et tryk på left control

men en kombination af alt gr og en hvilken som helst anden knap er det samme som at trykke på ctrl+alt+anden knap

hvilket nok var det nyp skrev i sit første indlæg
--> Alt Gr er en sammenblanding af Ctrl og Alt

men det var åbenbart ikke helt klart for mig.

for at teste dette prøvede jeg at åbne word og fandt ud af at følgende tastekombinationer giver disse tegn (med dansk tastatur)
ctrl+alt+2 = @
ctrl+alt+3 = £
ctrl+alt+4 = $
ctrl+alt+7 = {
ctrl+alt+8 = [
ctrl+alt+9 = ]
ctrl+alt+0 = }
ctrl+alt+´ = |
ctrl+alt+¨ = ~
(de ovenstående eksempler er skrevet ved brug af ctrl+alt+[tast] i stedet foralt gr+[tast])

i øvrigt er Event.modifiers = undefined i alle mine eksempler, så jeg ved stadig ikke hvad den betyder

konlusionen må være at alt gr + [tast] er det samme som ctrl+alt gr+[tast]
(dog er der lige den undtagelse at alt gr+del ikke undfører ctrl+alt+delete)
Avatar billede qumle Nybegynder
19. juni 2006 - 11:27 #6
svar...
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