webForumDet fria alternativet

Kortkommandon

15 svar · 602 visningar · startad av Web-Tor

Web-TorMedlem sedan nov. 200013 890 inlägg
#1

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.

Peter SMedlem sedan dec. 20025 483 inlägg
#2

Sure:

document.onkeydown=function(e){
    e=e||window.event;

    if (e.altKey && e.keyCode == 80) print();
}

:)

Web-TorMedlem sedan nov. 200013 890 inlägg
#3

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>
Jesper TMedlem sedan nov. 20017 144 inlägg
#4

onKeyup?

Web-TorMedlem sedan nov. 200013 890 inlägg
#5

Nja, som jag skriver så fungerar koden fast jag skulle vilja ändra till till onkeypress. ;)
En IE-lösning räcker.

Peter SMedlem sedan dec. 20025 483 inlägg
#6

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.

:)

Web-TorMedlem sedan nov. 200013 890 inlägg
#7

Okey, då förstår jag.
Får lära mig att leva med onkeydown. ;)
Tack igen!

Web-TorMedlem sedan nov. 200013 890 inlägg
#8

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?

Web-TorMedlem sedan nov. 200013 890 inlägg
#9

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.

JohnsenMedlem sedan juli 2000836 inlägg
#10
function bapp(){
//öppna din egna hjälp här...
return false;
}

document.onhelp=bapp;
Web-TorMedlem sedan nov. 200013 890 inlägg
#11

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

JohnsenMedlem sedan juli 2000836 inlägg
#12

Man kan inte få al(l)t.

<div onclick="alert('Knapp A');" tabindex="0" actionkey="a" [b]accesskey="a"[/b]>A</div>
Web-TorMedlem sedan nov. 200013 890 inlägg
#13

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

JohnsenMedlem sedan juli 2000836 inlägg
#14

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

Web-TorMedlem sedan nov. 200013 890 inlägg
#15

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. :)

JohnsenMedlem sedan juli 2000836 inlägg
#16

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>
133 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)