function handleCiffer(id,event) { var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode; if ((keyCode >= 48) && (keyCode <=57)) { var cif="0123456789".split(""); var c=cif[keyCode-48]; document.getElementById(id).innerHTML=c; return true; } else {return false;} }
Koden bygger på et script jeg har fundet på Nettet, og den første linje i funktionen skulle tage højde for forskelle i diverse browsere. Den sidste del af scriptet kunne sikkert gøres mere elegant.
Men nu til problemet: Koden virker i Internet Explorer, men den gør ingenting i Mozilla Firefox og Netscape. Til gengæld slår den Opera ihjel. Og nu troede jeg ellers lige jeg var så dygtig...
<script type="text/javascript"> function handleCiffer(elm,e){ e = e ? e : event; var kCode = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode; if (kCode >= 48 && kCode <= 57){ elm.innerHTML = String.fromCharCode(kCode); alert(String.fromCharCode(kCode)); return true; }else return false; }
</script>
-- Operaen følger så med uden problemer, men bemærk lige, at den har specialfunktioner på tal-taster, så effekten bliver ret sjov, hvis du begynder at trykke på f.eks. 7 og 8 (zoom ud og zoom ind !-)
-- alerten er med for at vise fraværet af reaktion i Geckoerne, funktionen bliver simpelthen ikke kaldt !o]
roenving -> Tak for HTML-forkortelsen: onkeypress='return handleCiffer(this,event)'
Men det kan da ikke passe, at de andre browsere ikke kender ordet. Så må man vel kunne gøre det på en anden måde?
Jeg er nu begyndt at tro at problemet er et helt andet, som jeg ikke har omtalt - nemlig at tabellen (incl. id="id17") er defineret i dokumentet vha. Javascript. - Hilsen Per
Tilføjelse: Min sidste bemærkning viser sig at være uden betydning. Det gør ingen forskel, om jeg bruger Javascript ved generering af HTML-koden eller ej.
Mit grundlæggende problem er altså: Hvordan får jeg de mest almindelige browsere til at læse hvilken tast jeg trykker på?
(Jeg husker nogle ord fra andre sprog: inkey og readkey...) - Hilsen Per
- men for nu lige at vende tilbage til spørgsmålet, så giver onkeydown og onkeypress jo egentlig kun mening i et element, hvor man kan sætte cursoren - og redigere. På den baggrund er det jo ikke så tosset, at FF ikke udløser disse events :)
En løsning kunne jo være, at du holder øje med brugerens klik i dokumentet - og viser et ellers skjult input-element henover td'en, når brugeren klikker i denne. Når brugeren så klikker udenfor - eller trykker 'Return' - flyttes input-indholdet over i td'en - og input-elementet gemmes :)
JAVASCRIPT-kode: var markedField="" function handleCif(e) { if (markedField == "") {return false}; e = e ? e : event; var kCode = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode; if ((kCode >= 48 && kCode <= 57) || (kCode >= 96 && kCode <= 105)) { if (kCode <= 57) {var c=""+(kCode-48)} else {var c=""+(kCode-96)}; document.getElementById(markedField).innerHTML = c; return true; } else return false; } document.onkeydown=handleCif;
Opera udfører mit script, men først EFTER at have fulgt sin default-handling på onkeypress, onkeydown eller onkeyup. - Jeg ved ikke hvordan jeg får Opera til at makke ret.
olebole & roenving -> Venligst læg svar. Jeg foreslår 40:20 i Oles favør. - Hilsen Per
olebole -> Min netforbindelse har været nede, så jeg havde ikke mulighed for at læse dine sidste forslag. Et skjult inputfelt lyder rigtigt, hvis Opera skal overbevises. - Hilsen Per
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.