[JS] Achterhalen of er een input of textarea geselecteerd is

Pagina: 1
Acties:

  • GewoonNico
  • Registratie: April 2003
  • Laatst online: 19-02 22:29
Ik heb een fotoalbum gemaakt waar je doorheen kunt surfen met de pijltoetsen,
maar, nu komt het probleem:
Als ik een reactie onder die foto plaats en dan een eerder stukje tekst wil veranderen en ik doe dit met de pijltoetsen; dan ga ik naar de vorige foto.
(En dat was dus niet de bedoeling op dat moment).

hier is de code
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
document.onkeydown = keyboard;
function keyboard()
    {
    switch (event.keyCode)
        {
        case 37:    if (document.getElementById("nav_back")) { document.location.href = document.getElementById("nav_back").href;   }
            break;
        case 38:    if (document.getElementById("nav_index")){ document.location.href = document.getElementById("nav_index").href; }
            break;
        case 39:    if (document.getElementById("nav_next"))    { document.location.href = document.getElementById("nav_next").href;    }
            break;
        }
    }


Dus, in het kort:
Hoe voorkom ik dat de functie keyboard() wordt uitgevoerd wanneer er een onderdeel van een formulier is geselecteerd.
Bestaat er iets als document.selected.?

(En misschien weet iemand 1,2,3 hoe ik deze functie ook werkend krijg in FF?)

  • André
  • Registratie: Maart 2002
  • Laatst online: 09:23

André

Analytics dude

Met de Target (FF) of srcElement (IE) kun je uitzoeken welk element de event triggerde ;)

  • GewoonNico
  • Registratie: April 2003
  • Laatst online: 19-02 22:29
Ik heb het een en ander geprobeerd.
Maar als ik een alert doe dan krijg ik


[ object ]

De code die ik heb gebruikt:
[code=js]
alert(window.event.srcElement);
[/code]


Is al opgelost.

[ Voor 16% gewijzigd door GewoonNico op 16-12-2005 16:47 ]


  • wilcodl
  • Registratie: September 2004
  • Laatst online: 09-02 11:24
ik wou deze deze topic toch nog even onder de aandacht brengen omdat ik met hetzelfde probleem zit, en ik geen oplossing in dit topic of ergens anders kan vinden.

Ik heb dus ook een fotoalbum waarmee je met de pijltjestoetsen door de foto's kan bladeren. Als je dan in het reactieformulier een teken opzij gaat met de pijltjestoetsen ga je dus naar de volgende of vorige foto, wat natuurlijk niet de bedoeling is.

Ik gebruik deze code voor het herkennen welke toets is ingedrukt:

HTML:
1
<body onkeydown="keycodes(this, event);">

JavaScript:
1
2
3
4
5
6
7
8
9
function keycodes(field, evt){
keyCode = document.layers ? evt.which : document.all ? event.keyCode :
document.getElementById ? evt.keyCode : 0;

if(keyCode == 37) { window.location.href = vorige;}  // links
//if(keyCode == 38) { window.location.href = "?cat=$cat\";}  // omhoog
if(keyCode == 39) { window.location.href = volgende;}  // rechts
//if(keyCode == 40) { window.location.href = "$link\";}  // omlaag
}


ik heb al verschillende dingen geprobeerd zoals een onFocus op het formulierveld, maar het is nog niet gelukt. Is er iemand die een oplossing weet zodat de functie keycodes niet wordt uitgevoerd? bvd

  • user109731
  • Registratie: Maart 2004
  • Niet online
Een simpele mogelijkheid is in je functie checken wie het event triggerde. Dit word dan dus zoiets in jouw geval:
JavaScript:
1
if (evt.target.tagName == "INPUT") return;

Let er alleen op dat je voor IE srcElement moet gebruiken ipv target :)

  • wilcodl
  • Registratie: September 2004
  • Laatst online: 09-02 11:24
Bedankt Grote Prutser!
Het script werkt nu in iig in Firefox 1.5, IE 6.0 en Opera 9

Ik heb het zo opgelost:
HTML:
1
2
3
4
5
<!--[if IE]>
<script type="text/javascript">
var ie = true;
</script>
<![endif]-->

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function keycodes(field, evt){

if (window.ie){
if (evt.srcElement.tagName == "INPUT" || 
evt.srcElement.tagName == "TEXTAREA") return;
} else {
if (evt.target.tagName == "INPUT" || evt.target.tagName == "TEXTAREA") return;
}

keyCode = document.layers ? evt.which : document.all ? event.keyCode :
document.getElementById ? evt.keyCode : 0;

if(keyCode == 37) { window.location.href = vorige;}  // links
//if(keyCode == 38) { window.location.href = "?cat=$cat\";}  // omhoog
if(keyCode == 39) { window.location.href = volgende;}  // rechts
//if(keyCode == 40) { window.location.href = "$link\";}  // omlaag
}

HTML:
1
<body onkeydown="keycodes(this, event);">

[ Voor 9% gewijzigd door wilcodl op 25-06-2006 20:01 ]

Pagina: 1