|
| 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
| |
|
|