Kan man använda sig av kortkommandon i Javascript på något sätt?
- Trycker användaren Alt+P på en sidan ska funktionen print() köras.
Eftersom det inte gäller form-element kan jag tyvärr inte använda accesskey.
15 svar · 602 visningar · startad av Web-Tor
Kan man använda sig av kortkommandon i Javascript på något sätt?
- Trycker användaren Alt+P på en sidan ska funktionen print() köras.
Eftersom det inte gäller form-element kan jag tyvärr inte använda accesskey.
Sure:
document.onkeydown=function(e){
e=e||window.event;
if (e.altKey && e.keyCode == 80) print();
}
:)
Tack!
Du fick in mig på rätt spår jag har har nu fått ihop ett fungerande script. Helst skulle jag vilja ropa på funktionen genom onkeypress i stället för onkeydown och det ska fungera enligt MSDN men jag får det inte att funka.
<html>
<head>
<style type="text/css">
div {border:1px solid #555;background:#ddd;cursor:hand;width:50px;}
</style>
<script type="text/javascript">
function body_onkeydown(){
key=window.event.keyCode;
if(window.event.altKey){
switch(key){
case 65:
actionkey('a');
break;
case 66:
actionkey('b');
break;
}
}
function actionkey(action){
var div=document.getElementsByTagName('div');
for(i=0; i < div.length; i++){
if(div[i].actionkey==action)
div[i].click()
}
}
}
</script>
</head>
<body onkeydown="body_onkeydown();">
<div onclick="alert('Knapp A');" tabindex="0" actionkey="a">A</div>
<br>
<div onclick="alert('Knapp B');" tabindex="0" actionkey="b">B</div>
</body>
<html>
onKeyup?
Nja, som jag skriver så fungerar koden fast jag skulle vilja ändra till till onkeypress. ;)
En IE-lösning räcker.
Jag tror att det blir svårt att åstadkomma det via onkeypress eftersom Alt-tangenten är associerad med menyraden i IE.
Vad MSDN menar är att keyCode är kombinerbar med onkeypress, vilket stämmer. Detta gäller dock ej altKey och det är där problemet ligger.
:)
Okey, då förstår jag.
Får lära mig att leva med onkeydown. ;)
Tack igen!
Har hittat en liten "bugg" med ovanstående kod. När man trycker Alt-A så dyker även menyn "Favorites" > "Add to favorites" upp. Någon som kan komma på ett sett att komma runt detta?
Har jobbat vidare på detta och fångar nu även upp F1-knappen för att öppna en hjälpsidan. Problemet är då att Explorer slänger upp sitt hjälpfönster. Finns det verkligen inte något sätt att stoppa detta?
Break, return false, cancelBubble... jag har testat det mesta.
En IE-lösning räcker.
function bapp(){
//öppna din egna hjälp här...
return false;
}
document.onhelp=bapp;
Hej Mr Johnsen!
Det var ju en smidig lösning - fast det funkar ju bara för F1-problemet. Kör jag Alt+A i det här exemplet så öppnas ju fortfarande Favorites-menyn. :o
Man kan inte få al(l)t.
<div onclick="alert('Knapp A');" tabindex="0" actionkey="a" [b]accesskey="a"[/b]>A</div>
Nja, det där förändrar inte saken. accesskey funkar ju inte på en <div>-tagg. Hade hoppats på att det fanns nåt liknande oncontextmenu fast för toppmenyerna... :l
Jag vet att det känns långsökt, men har du provat följande?
<html>
<head>
<style type="text/css">
div {border:1px solid #555;background:#ddd;cursor:hand;width:50px;}
</style>
<script type="text/javascript">
function body_onkeydown(){
key=window.event.keyCode;
if(window.event.altKey){
switch(key){
case 65:
actionkey('a');
break;
case 66:
actionkey('b');
break;
}
}
function actionkey(action){
var div=document.getElementsByTagName('div');
for(i=0; i < div.length; i++){
if(div[i].actionkey==action)
div[i].click();
}
}
}
</script>
</head>
<body onkeydown="body_onkeydown();">
<div onclick="alert('Knapp A');" tabindex="0" actionkey="a" accesskey="a">A</div>
<br>
<div onclick="alert('Knapp B');" tabindex="0" actionkey="b" accesskey="b">B</div>
</body>
<html>
Det funkar iaf för mig. (inte så snyggt, men ändå).
Har för mig att jag löste ett liknande problem på ett annat sätt, men jag får lov att återkomma med det
Ah! :i
Det funkade ju och jag kom på ett sätt att slippa sätta ut accesskey på varje <div>-tagg.
function actionkey(action){
var div=document.getElementsByTagName('div');
for(i=0; i < div.length; i++){
if(div[i].actionkey==action){
[b]div[i].accessKey=action;[/b]
div[i].click();
}
}
}
Johnsen skrev:
Har för mig att jag löste ett liknande problem på ett annat sätt, men jag får lov att återkomma med det
Ja, gör gärna det. :)
Det var nog så här:
<html>
<head>
<style type="text/css">
div {border:1px solid #555;background:#ddd;cursor:hand;width:50px;}
</style>
<script>
function doIt(){
alert(event.srcElement.innerHTML)
event.srcElement.blur();
}
</script>
</head>
<body>
<div onfocus="doIt()" accesskey="a">A</div>
<br>
<div onfocus="doIt()" accesskey="b">B</div>
</body>
<html>