/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
At fange både keycode og button værdi
Fra : Rune Jensen


Dato : 17-07-09 21:01

Jeg ønsker ved onchange at vide, om det er tastetryk eller museklik, som
har ændret en værdi. Helt nøjagtigt, så skal jeg have fat i værdi 13
(retur) for keycode og så click-eventen (det skal hægtes på en drop down
box).

Kan det lade sig gøre?

noget a la

function checkEnterKey (e) {
var key;
e = e || window.event;

// hvis museknap, hent værdi
if (e.button) key = e.button;

// hvis tast, hent værdi
else if (e.keyCode) key = e.keyCode;

var targetelement ;
if (e.target) {targetelement = e.target}
else if (e.srcElement) {targetelement = e.srcElement}

// gå til function gotoPage, hvis (RETUR-tast eller mouseclick)
if((key == 13 || key == 1) && targetelement.name=='pagenumber') {
gotoPage(targetelement.selectedIndex) ;
}

}

....dette virker naturligvis ikke. Men er der nogen forslag til, hvordan
man ellers kan gøre det?


MVH
Rune Jensen

 
 
Birger Sørensen (18-07-2009)
Kommentar
Fra : Birger Sørensen


Dato : 18-07-09 00:17

Rune Jensen udtrykte præcist:
> Jeg ønsker ved onchange at vide, om det er tastetryk eller museklik, som har
> ændret en værdi. Helt nøjagtigt, så skal jeg have fat i værdi 13 (retur) for
> keycode og så click-eventen (det skal hægtes på en drop down box).
>
> Kan det lade sig gøre?
>
> noget a la
>
> function checkEnterKey (e) {
> var key;
> e = e || window.event;
>
> // hvis museknap, hent værdi
> if (e.button) key = e.button;
>
> // hvis tast, hent værdi
> else if (e.keyCode) key = e.keyCode;
>
> var targetelement ;
> if (e.target) {targetelement = e.target}
> else if (e.srcElement) {targetelement = e.srcElement}
>
> // gå til function gotoPage, hvis (RETUR-tast eller mouseclick)
> if((key == 13 || key == 1) && targetelement.name=='pagenumber') {
> gotoPage(targetelement.selectedIndex) ;
> }
>
> }
>
> ...dette virker naturligvis ikke. Men er der nogen forslag til, hvordan man
> ellers kan gøre det?
>
>
> MVH
> Rune Jensen

Brug event.type... hvis den eksisterer i IE...
https://developer.mozilla.org/en/DOM/event.type

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Rune Jensen (18-07-2009)
Kommentar
Fra : Rune Jensen


Dato : 18-07-09 02:13

Birger Sørensen skrev:

> Brug event.type... hvis den eksisterer i IE...
> https://developer.mozilla.org/en/DOM/event.type

Jeg kan simpelthen ikke forstå den addeventlistener. Ikke fordi, jeg
ville vildt gerne lære det, men det er for avanceret for mig.

Så jeg har fusket, og sat en global variabel, som indeholder keyCode.
Det er ikke kønt, og ikke ligefrem noget at være stolt af, men det virker.

Jeg må så bare se at læse noget mere op på det med addeventlisteners, og
så bare lære det hte hard way.. Men tak for svaret Birger, i gør under
alle omstændigheder alle et godt arbejde her i gruppen for sådan nogle
javascriptnewbies som mig.

;)


MVH
Rune Jensen

Stig Johansen (18-07-2009)
Kommentar
Fra : Stig Johansen


Dato : 18-07-09 05:43

Rune Jensen wrote:

> Så jeg har fusket, og sat en global variabel, som indeholder keyCode.
> Det er ikke kønt, og ikke ligefrem noget at være stolt af, men det virker.

Jeg ved ikke hvordan du ellers vil løse det.
Hvis du får fat i event typen, er det onchange, hvadenten det er mus eller
keyboard, der blev brugt forinden.

--
Med venlig hilsen
Stig Johansen

Rune Jensen (18-07-2009)
Kommentar
Fra : Rune Jensen


Dato : 18-07-09 06:23

Stig Johansen skrev:
> Rune Jensen wrote:
>
>> Så jeg har fusket, og sat en global variabel, som indeholder keyCode.
>> Det er ikke kønt, og ikke ligefrem noget at være stolt af, men det virker.
>
> Jeg ved ikke hvordan du ellers vil løse det.
> Hvis du får fat i event typen, er det onchange, hvadenten det er mus eller
> keyboard, der blev brugt forinden.

Ar, ja. Forskellen ligger i, hvor elegante løsningerne nu er.

Som det er nu, kan jeg ikke tjekke for f.eks. keyCode i en onchange (og
tro mig, jeg har virkelig gennemtæsket det script for en løsning den
vej..). Altså, man kan ikke tjekke for to events på samme tid. Jeg har
læst, det burde være lige så nemt med JS som med CSS, fordi det er den
samme DOM, som man manipulerer - men det passer ikke helt. I CSS, der
ville man kunne lave noget a la:

::onchange::onclick

...sådan med pseudoCode. Altså definer stilen for et element, hvis værdi
er ændret med et onclick. Men du kan ikke i JS tjekke for en onclick i
en onchange - umiddelbart. Man kunne også tage mere realistisk, et a,
som er aktiveret mål for et andet link (det er target), som der bliver
hoveret over:

a::target::hover

Hvad jeg læste af Birgers svar var, at man ville kunne have netop dette
lille nummer og tjekke på to eventlisteners samtidig med addevent, og på
en eller anden måde synes jeg det er pænere (viser man har kontrol med
det). Og så er det også vejen til diskret/unobtrusive javascript,
selvfølgelig.

Men det virker med en global vasriabel, og det virker så jeg forstår
det, så..

;)


MVH
Rune Jensen

Rune Jensen (18-07-2009)
Kommentar
Fra : Rune Jensen


Dato : 18-07-09 06:50

Rune Jensen skrev:

> a::target::hover

W3C er som sædvanligt bedre til at forklare den del:

"An example of combining dynamic pseudo-classes:
a:focus
a:focus:hover

The last selector matches a elements that are in the pseudo-class :focus
and in the pseudo-class :hover."


MVH
Rune Jensen

Stig Johansen (18-07-2009)
Kommentar
Fra : Stig Johansen


Dato : 18-07-09 11:05

Rune Jensen wrote:

> W3C er som sædvanligt bedre til at forklare den del:

Sikkert :)

> "An example of combining dynamic pseudo-classes:
> a:focus
> a:focus:hover

Men 'os', der har arbejdet med events siden windows 3.11 véd, at der ingen
'historik er i events.

Hvis vi tager f.eks en onchange, der bliver forårsaget af enten en key
event, eller en mouse event, så er rækkefølgen ca.
* Key:
- OnKeydown
- OnkeyPress
- OnChange
- OnKeyUp
...
* Mouse
- OnMouseDown
- OnChange
- OnMouseUp
...

Hæng mig ikke op på den faktiske rækkefølge, men:
Hver event er en afsluttet handling(funktionskald), og man kan ikke i f.eks.
en onchange 'spore' hvilke events, der ligger forud.

Hvis du vil have historik på de forudgående events, så må du selv
implementere en 'history-stack'.

Hvad du vil bruge det til forstår jeg ikke rigtigt, men jeg er heller ikke
så kvik.

--
Med venlig hilsen
Stig Johansen

Rune Jensen (18-07-2009)
Kommentar
Fra : Rune Jensen


Dato : 18-07-09 13:12

Stig Johansen skrev:
> Rune Jensen wrote:
>
>> W3C er som sædvanligt bedre til at forklare den del:
>
> Sikkert :)

Well, de er da vant til at skulle forklare sig om ikke andet ;)

>> "An example of combining dynamic pseudo-classes:
>> a:focus
>> a:focus:hover
>
> Men 'os', der har arbejdet med events siden windows 3.11 véd, at der ingen
> 'historik er i events.
<SNIP Forklaring på events ikke-historik>

Ja, se det vidste jeg så ikke... så stiller sagen sig nok lidt
anderledes. Trods alt.

> Hvis du vil have historik på de forudgående events, så må du selv
> implementere en 'history-stack'.

Næh, egentlig ikke. Formålet var at opnå det, jeg beskrev. Unobtrusive
JS er bare en fiks idé, hvis det er det du mener.

> Hvad du vil bruge det til forstår jeg ikke rigtigt, men jeg er heller ikke
> så kvik.

Nåh-nåh.

God sommer-weekend og tsk for svarene, joh, jeg lærte noget også i dag,
så ;)


MVH
Rune Jensen

Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste