Avatar billede bgo Nybegynder
28. november 2006 - 12:41 Der er 14 kommentarer og
1 løsning

onkeypress registrerer ikke backspace og del

Jeg registrerer at der sker ændringer i et tekstfelt, så jeg kan vise at der er sket ændringer (så bruger husker at gemme). Jeg opdager blot at den ikke registrerer hverken backspace eller del. Kan jeg ændre på det på nogen måde, evt. via en anden end onkeypress?
Avatar billede olebole Juniormester
28. november 2006 - 14:44 #1
<ole>

onkeydown  ;o)

/mvh
</bole>
Avatar billede olebole Juniormester
28. november 2006 - 14:46 #2
- men hvorfor ikke bare bruge onchange-event'en, der - når feltet forlades - kun fyres af, hvis indholdet er ændret?  =)
Avatar billede olebole Juniormester
28. november 2006 - 14:52 #3
Du kunne jo prøve noget à la:

<script type="text/JavaScript">
var bChanged = false;
window.onbeforeunload = function(){
    alert(bChanged)
    if (bChanged) return "Du har vist rettet noget";
}
</script>

<input type="text" onchange="bChanged=true">
<input type="text" onchange="bChanged=true">
<input type="text" onchange="bChanged=true">
Avatar billede olebole Juniormester
28. november 2006 - 14:54 #4
Jeg er ikke sikker på, om onchange-event'en fyres af, hvis du går direkte fra feltet til det røde kryds ... derfor alert'en  ;o)
Avatar billede bgo Nybegynder
28. november 2006 - 15:14 #5
onkeydown virkede ganske fortrinligt :)

Jeg havde oprindeligt brugt onchange - men den blev jo først fyret af når focus blev fjernet fra tekstfeltet. Efter lidt tid blev jeg enig med mig selv om at det ikke var helt hensigtsmæssigt, da jeg ikke kunne være sikker på at brugeren netop fjernede focus FØR de forlod siden. Jeg har nemlig to måder at vise at der er sket ændringer: Tekstfeltets farve, samt farven på Gem-linket - og Det er ikke så smart at Gem-linket vises som inaktiv hvis der er sket ændringer ;)

Din anden løsning ville så rette bod på noget af det ;) Jeg vil i al fald gøre brug af begge løsninger - for folk kan, selvom det vises tydeligt på skærmen, stadig glemme at de har foretaget ændringer der ikke er gemt ;)

Så skal jeg blot have rettet en focus()-fejl i IE, men det kan nok klares ved hjælp af noget AJAX.

Tak for hjælpen - og den ekstra inspiration ;) Smid et svar og der er point ;)
Avatar billede bgo Nybegynder
28. november 2006 - 15:20 #6
åh ja, onchange event'en bliver ikke fyret af hvis man lukker vinduet - der siger alert'en false. Men jeg kan prøve at lave noget via førnævnte kombination - ellers kan jeg umiddelbart godt leve med dén detalje ;)
Avatar billede olebole Juniormester
28. november 2006 - 15:29 #7
Hvis onchange skal virke, skal du nok klikke et sted i dokumentet (udenfor feltet), _før_ du klikker på det røde kryds. Det var det, jeg mente med: "... hvis du går direkte fra feltet til det røde kryds"  ;o)

Mon ikke dette er en bedre løsning:

<script type="text/JavaScript">
window.onbeforeunload = function(){
    var bChanged = false;
    var aInp = document.getElementsByTagName("input");
    for (var i=0,j=aInp.length; i<j; i++) {
        if (aInp[i].type=="text" && aInp[i].value!=aInp[i].defaultValue) bChanged = true;
    }
    if (bChanged) return "Du har vist rettet noget";
}
</script>
Avatar billede olebole Juniormester
28. november 2006 - 15:35 #8
- og hvis det kun skal gælde visse tekstfelter, kan man jo sætte en klasse på dem - og spørge til den klasse i scriptet. I den forbindelse skal du vide,man gerne må sætte flere klasser på et element:
    <input class="foo bar" type="text">

- hvor 'foo' måske sætter udssende og 'bar' kun bruges til at genkende bestemte felter med i scriptet. Man kan nu også bruge dem begge til at style med, således at den sidste udvidder den første - men det er ikke det, jeg er udepå i dette eksempel  ;o)

Skal du genkende på baggrund af 'bar' i eksemplet, kunne du skrive:
    if (aInp[i].className.indexOf("bar")!=-1 && aInp[i].value!=aInp[i].defaultValue)
Avatar billede olebole Juniormester
28. november 2006 - 15:37 #9
Denne løsning har den fordel, at den kun tjekker, hvis brugeren lukker ... ikke på hver eneste key-event  :)
Avatar billede bgo Nybegynder
28. november 2006 - 15:45 #10
hehe, jeg brugte lidt tid på at decode den med det røde kryds, for jeg bruger ikke standard XP skin :D

var bChanged=false; er jeg nødt til at have udenfor funktionen, ellers kan jeg ikke ændre på den med onclick på Gem-linket og så ville jeg få pop-up'en når jeg gemmer ;) Men jeg prøver lige den bedre løsning ;)
Avatar billede bgo Nybegynder
28. november 2006 - 15:46 #11
hehe, jeg havde jo heller ikke lige tænkt på, at onkeydown blev triggered med tab-tasten også *lol*
Avatar billede bgo Nybegynder
28. november 2006 - 16:00 #12
den bedre løsning virker også ganske fortrinligt :)

Jeg ender nok med at bruge begge dele, trods der checkes på hver key-event, og ofre lidt for brugervenligheden ;) Skal blot tage højde for tab-tasten (m.fl.)
Avatar billede olebole Juniormester
29. november 2006 - 15:02 #13
Okay, jamen skulle jeg mon så ikke kaste et bette svar efter dig?  ;o)
Avatar billede bgo Nybegynder
30. november 2006 - 12:28 #14
jow ;)
Avatar billede olebole Juniormester
30. november 2006 - 12:48 #15
Tak for points  ;o)
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