webForumDet fria alternativet

onkeypress för all del, fast inte i formulär

JavaScript

5 svar · 476 visningar · startad av petergrennanet

Medlem sedan dec. 1999258 inlägg
Frågan#1

Jag har ett ganska bra fungerade javascript som sniffar onkeypress events och gör smarta saker med navigeringen beroende på vilka knappkombinationer man trycker. Till viss del försöker jag "kopiera" vad Gmail kan göra.

Nu funkar det faktiskt rätt så bra i både FF och IE. Det är bara ett stort problem kvar, så fort jag sätter focusen (med musen) i en input eller en textarea så kan jag inget skriva eftersom allt snappas upp av detta ovannämnda skript. Effekten är att jag inte kan skriva in nått i formulären.

En lösning vore nått i stil med detta:

<input type="text" name="penisdimension" onfocus="disableKeyboardShortcuts()" onblur="enableKeyboardShortcuts()" />

...och dessa funktioner, disableKeyboardShortcuts() och enableKeyboardShortcuts() skulle då helt enkelt "toggla" en switch som för en stund tar bort min onkeypress event funktion. Problemet med denna lösning är att den är opraktisk för mig. Jag har massivs med olika formulär att då skriva om och göra ännu stökigare än vad de redan är. Finns det ingen bättre/smidigare lösning på detta enkla problem?

Medlem sedan aug. 20039 340 inlägg
#2

Inkludera denna kod till alla sidor:

window.onload=function(){
  els = [document.getElementsByTagName("INPUT"), document.getElementsByTagName("TEXTAREA")];

  for (i=0; i<els.length; i++)
    for (j=0; j<els.length; j++){
      els[i][j].onfocus = disableKeyboardShortcuts;
      els[i][j].onblur = enableKeyboardShortcuts;
    }
}

/r Fixade ett fel!

Medlem sedan dec. 20025 483 inlägg
#3

Eller

function disableKeyboardShortcuts(e){
    e = e || window.event;

    if (typeof e.cancelBubble == "boolean"){
	e.cancelBubble = true;
    } else if (e.stopPropagation){
	e.stopPropagation();
    }
}

...onkeypress="disableKeyboardShortcuts(event)"...
Medlem sedan aug. 20039 340 inlägg
#4

Peter S skrev:

Eller

function disableKeyboardShortcuts(e){
    e = e || window.event;

    if (typeof e.cancelBubble == "boolean"){
	e.cancelBubble = true;
    } else if (e.stopPropagation){
	e.stopPropagation();
    }
}

...onkeypress="disableKeyboardShortcuts(event)"...

Fast jag trodde att han ville slippa joxa med alla form-element?

Medlem sedan dec. 20025 483 inlägg
#5

Då föreslår jag att han använder onkeypress istället för onfocus/-blur. Så med din kod som utgångspunkt skulle det bli:

window.onload=function(){
  els = [document.getElementsByTagName("INPUT"), document.getElementsByTagName("TEXTAREA")];

  for (i=0; i<els.length; i++)
    for (j=0; j<els[b][ i ][/b].length; j++){
      els[i][j].onkeypress = function(e){
	e = e || window.event;

	if (e.stopPropagation){
	  e.stopPropagation();
	} else if (typeof e.cancelBubble == "boolean"){
	  e.cancelBubble = true;
	}
      }
    }
}
Medlem sedan dec. 1999258 inlägg
#6

Tack for hjalpen!

274 ms totalt · 4 externa anrop · v20260731065814-full.20824b9f
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
133 ms — ändringar (db)