Avatar billede jonashn Nybegynder
16. august 2007 - 08:12 Der er 23 kommentarer og
1 løsning

Firefox' ignorering af events i inputfelt

Hej!

Jeg laver et login-system for en ven, og der er en funktion der ved onkeyup på passwordfeltet checker om den pressede tast har keyCode 13, altså enter.
Problemet er at den ikke virker i Firefox, men perfekt i Internet Explorer. Hvad kan problemet være? Jeg er 99% sikker at det ikke er min kode det er galt med, funktionen som trigges ved onkeypress indeholder en alert.
Formen ser således ud:
(jeg har også indsat alerts i events'ne for at sikre mig helt)

<form action="java script:checkKey()" onsubmit="checkKey()">
    <input onchange="alert(); checkKey()"
            onkeypress="alert(); checkKey()"
            onkeydown="alert(); checkKey();"
            onkeyup="alert(); checkKey();
            name="pwText"
            size="15"
            type="password"> &nbsp;
    <input value="Submit" onclick="checkPw()" type="button">
</form>

Jeg har indsat alle de ekstra events for at sikre at det virker i ff, hvilket det så alligevel ikke gør.

I øvrigt virker alt, man kan godt submitte passwordet ved at KLIKKE på submit, men jeg er stadigvæk ikke helt tilfreds.
Avatar billede montago Praktikant
16. august 2007 - 08:37 #1
som jeg husker det, er submit default action ved tryk på enter - således logger jeg tit ind ved at trykke enter lige efter password...

det jeg tror er problemet er at du ikke læser din keyChar rigtigt...

prøv med
if (!e) var e = window.event;
var charCode = (e.charCode) ? e.charCode : ((e.keyCode) ? e.keyCode : ((e.which) ? e.which : 0))

charCode er derefter fx 13 ved ENTER... husk at ENTER = 10+13 tjek derfor også på 10
(CR+LF)
Avatar billede jonashn Nybegynder
16. august 2007 - 08:39 #2
Det prøver jeg !
Avatar billede jonashn Nybegynder
16. august 2007 - 08:40 #3
MEn den burde alligevel alerte ved inputændring, og pointen i mit system er faktisk at den checker om pw er korrekt efter hver enkelt tegn, og ikke kun enter.
Avatar billede montago Praktikant
16. august 2007 - 08:46 #4
1. det er ikke smart at lave password check direkte på formen... det gør det nemmere at hacke

2. Firefox har en anden event handler end Explore -- læs på http://www.quirksmode.org/
Avatar billede jonashn Nybegynder
16. august 2007 - 09:08 #5
Nu har jeg også føjet nogle eventhandlere til min onLoad-funktion: (samt givet password-feltet id'et "pw")


pw=document.getElementById("pw")
pw.onchange=checkKey;
pw.onkeypress=checkKey;
pw.onkeydown=checkKey;
pw.onkeyup=checkKey;


men stadig ingen registrering i ff.
Avatar billede montago Praktikant
16. august 2007 - 09:44 #6
hvor har du placeret de eventhandlers ?

du skal registrere event på dit objekt med addEventListener() eller lign...

brug:
<script>
window.onkeypress = checkKey
window.onkeydown = checkKey;
window.onkeyup = checkKey;
</script>
Avatar billede jonashn Nybegynder
16. august 2007 - 09:59 #7
Jeg har placeret dem i en funktion der er registreret til at køre ved onLoad.

skal jeg bruge addEventListener efter xx.onblabla=etellerandet?
Avatar billede jonashn Nybegynder
16. august 2007 - 10:03 #8
Men jeg fatter stadig ikke hvad der er galt i den gode gamle <input onkeyup="foo()">?
FF kræver vel ikke at det skal gøres indlejret i <script> med w3c funktioner?
Avatar billede jonashn Nybegynder
16. august 2007 - 10:16 #9
..selv med addEventListener virker det i IE, men ikke i FF.
Avatar billede montago Praktikant
16. august 2007 - 12:53 #10
:D

der er intet galt med at skrive events direkte på tag'et og dette virker som regel også bedre end inline registrering...

i Gecko skal man bruge : document.addEventListener('keypress', keyHandler, true);
og behøver ikke keyDown

i keyhandler bruger du :
keyCode = evt.keyCode;   
charCode = evt.charCode;

http://www.quirksmode.org/js/keys.html kan du læse om hvordan man håndtere keypress i forskellige browsers
Avatar billede jonashn Nybegynder
16. august 2007 - 15:20 #11
Tak for linket montago.. Men hvis jeg opretter en tom html-side og indsætter <input onkeypress="alert()"> i bodyen så virker det ikke i FF, men kun IE.. Hvad kan der være galt?
Avatar billede olebole Juniormester
16. august 2007 - 15:28 #12
<ole>

Der er voldsom forskel på onkeydown og onkeypress. Dels er der forskel på, hvilke koder, der returneres i EVENT.keycode - og dels kan FF ikke disable default-handlingen ved onkeypress. Brug onkeydown i stedet. Til gengæld skal der ikke checkes for 10 ... 13 er det, der returneres i keyCode ved 'Return'  ;o)

Jeg har dog absolut ingen idé om, hvorfor du går denne omvej. Hvorfor ikke bare submitte formen?  =)

/mvh
</bole>
Avatar billede jonashn Nybegynder
16. august 2007 - 15:44 #13
ole-> det er fordi jeg har lavet dette dejlige lidt fancy system hvor man ikke behøver at trykke Enter, men bare bliver "dirigeret videre" uden at trykke enter når man har indtastet korrekt pw.

Jeg har nu prøvet at lave en tom side med <input onkeydown="alert();">, men der sker stadig intet! Jeg fatter det ikke. Er det min firefoxversion det er galt med? Det er 1.5.08.
Avatar billede jonashn Nybegynder
16. august 2007 - 15:47 #14
-så det er ikke specielt Enter der skal checkes for, og checkKey burde egentlig hedde checkPw, da den sammenligner de 4 første cifre i den dekrypterede kode (som er destinationen til den hemmelige side) (som dekrypteres med passwordet) med en 'magic value'.
Avatar billede olebole Juniormester
16. august 2007 - 15:50 #15
Jamen, hvorfor dog også forvirre brugeren? Hvorfor skal dit system virke anderledes end alle andre logins på WWW? Er det ikke modsætningen til brugervenlighed?  =)

Hvis ikke du kan få <input onkeydown="alert('Noget')"> til at virke, må du lægge et link - for så laver du andre fejl
Avatar billede jonashn Nybegynder
16. august 2007 - 16:04 #16
Du har ret Ole, jeg har også lavet koden sådan at webmasteren kan deaktivere det. Selvom det ikke er noget argument for at bruge det.

Mht til min "defekte" <input> har jeg lavet en tom htmlfil som kun indeholdt denne ene linie, med samme resultat!
Avatar billede olebole Juniormester
16. august 2007 - 16:35 #17
Det virker fint i min Firefox 1.5.0.12 - men det er til at vide med FF. Der kommer jo en patch 'hver fjerde time' - og de har det med at introducere nye fejl, når en gammel rettes  :o|
Avatar billede jonashn Nybegynder
16. august 2007 - 17:11 #18
Det er bare uforst&aring;eligt, at en s&aring;dan fejl eksisterer i version 5 af en kendt browser som er et kendt alternativ til f.eks IE.
Avatar billede jonashn Nybegynder
16. august 2007 - 18:33 #19
Nu har jeg checket om det er en casche-vil-ikke-reloade-ordentligt-fejl, men det er ikke tilfældet.
Avatar billede olebole Juniormester
16. august 2007 - 18:55 #20
FF er såmænd ikke mere fejlfri end IE ... deres fejl ligger blot lidt forskellige steder  :)
Avatar billede jonashn Nybegynder
17. august 2007 - 09:05 #21
Jeg prøver at opdatere min version. Så må jeg arbejde ud fra den opdaterede, hvor det højest sandsynligt virker.
Avatar billede jonashn Nybegynder
17. august 2007 - 09:39 #22
Puha.. Den nyeste er 2.0.0.6!
Avatar billede jonashn Nybegynder
25. oktober 2007 - 21:27 #23
Jeg droppede keyevents'ne i FF og besluttede at det var nok at klikke på enter.. Men jeg synes at olebole's og montago's svar har været brugbare, så læg et svar begge to, så deler i points'ne.
Avatar billede olebole Juniormester
25. oktober 2007 - 21:37 #24
Jamen, så er her et svar  :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester