Avatar billede clalar Nybegynder
26. juli 2005 - 13:12 Der er 44 kommentarer og
1 løsning

Onscreen tastatur

Er det muligt at lave et tastatur i html, der kan indsættes på en webside, således at man kan udfylde en formular uden at bruge tastaturet?

mvh clalar
Avatar billede roenving Novice
26. juli 2005 - 13:48 #1
Ja, men det er meget bøvlet !-)
Avatar billede krydset Nybegynder
26. juli 2005 - 13:51 #2
jeg havde nu forstillet mig en hel tabel med alle tegnene i, hvorefter hver felt havde deres id eks a, b, c, ,d og altefter hvad man trykkede på var der en javascript function der indsatte bogstavet i formularen
Avatar billede krydset Nybegynder
26. juli 2005 - 13:51 #3
kunne det være en måde roenvig, ved godt jeg ikke er spørger men er lidt nysgerrig :-P
Avatar billede roenving Novice
26. juli 2005 - 14:08 #4
Jepz, men det er _meget_ bøvlet og fylder en hulens masse i kode, medmindre man går over i avancerede metoder til at sætte events på tabellens celler !-)
Avatar billede clalar Nybegynder
26. juli 2005 - 14:54 #5
Er der en enklere måde?
Avatar billede krydset Nybegynder
26. juli 2005 - 16:16 #6
Oki.... Men jeg foretrækker nu osse mit tast her på bordet :-P det kan osse tåle at blive slået lidt til, det kan en 19" fladskærm ikke :-P
Avatar billede nielle Nybegynder
26. juli 2005 - 17:49 #7
Det kan meget hurtigt blive til et meget omfattende projekt, men her er da lidt at starte på:

<script type="text/javascript">
function keyPressed(elm)
{
    id = elm.id;

    tekstHerVar = document.getElementById("tekstHer");
    tekstHerVar.value += id;
    // alert("HELLO " + id);
}
</script>

<textarea id="tekstHer">
</textarea>

<table border="1">

<tr>
<td id="q" onClick="keyPressed(this);">q</td>
<td id="w" onClick="keyPressed(this);">w</td>
<td id="e" onClick="keyPressed(this);">e</td>
<td id="r" onClick="keyPressed(this);">r</td>
<td id="t" onClick="keyPressed(this);">t</td>
<td id="y" onClick="keyPressed(this);">y</td>
<td id="u" onClick="keyPressed(this);">u</td>
<td id="i" onClick="keyPressed(this);">i</td>
<td id="o" onClick="keyPressed(this);">o</td>
<td id="p" onClick="keyPressed(this);">p</td>
<td id="å" onClick="keyPressed(this);">å</td>
</tr>

<tr>
<td>a</td><td>s</td><td>d</td><td>f</td><td>g</td><td>h</td><td>j</td><td>k</td><td>l</td><td>æ</td><td>ø</td>
</tr>

<tr>
<td>z</td><td>x</td><td>c</td><td>v</td><td>b</td><td>n</td><td>m</td>
</tr>

</table>
Avatar billede roenving Novice
26. juli 2005 - 18:13 #8
Hrm, så kunne jeg heller ikke lade være:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
html,body{height:100%;margin:0px;border:0px;padding:0px;font-family:tahoma,verdana,arial,sans-serif;font-size:small;}
#tastatur td{padding:6px 10px;font-size:large;border:1px dotted green;width:1em;text-align:center;cursor:pointer;}
</style>
<script language="javascript" type="text/javascript">
var taster = new Array();
taster[0] = ['½','1','2','3','4','5','6','7','8','9','0','+'];
taster[1] = ['q','w','e','r','t','y','u','i','o','p','å',''];
taster[2] = ['a','s','d','f','g','h','j','k','l','æ','ø',''];
taster[3] = ['<','z','x','c','v','b','n','m',',','.','-',''];//>

window.onload = function(){
  var t = document.getElementById('tastatur'),newTr,newTd,newTxt;
  var newTable = document.createElement('table');
  t.appendChild(newTable);
  var newTbody = document.createElement('tbody');
  newTable.appendChild(newTbody);
  for(i=0;taster.length>i;i++){
    newTr = document.createElement('tr');
    newTbody.appendChild(newTr);
    for(j=0;taster[i].length>j;j++){
      newTd = document.createElement('td');
      newTr.appendChild(newTd);
      newTxt = document.createTextNode(taster[i][j]);
      newTd.appendChild(newTxt);
      newTd.onclick = function(){addText(this);};
    }
  }
  newTr = document.createElement('tr');
  newTbody.appendChild(newTr);
  newTd = document.createElement('td');
  newTr.appendChild(newTd);
  newTxt = document.createTextNode(" ");
  newTd.appendChild(newTxt);
  newTd.onclick = function(){addText(this);};
  newTd.colSpan = taster[0].length;
  newTd.style.height = "20px";
}
function addText(elm){
  var ta = document.getElementById('mitTextArea');
  ta.value += elm.firstChild.nodeValue;
}
</script>
<title>Onscreen tastatur</title>
</head>

<body>
<textarea id="mitTextArea"></textarea>
<div id="tastatur"></div>
</body>

</html>
Avatar billede blackscorpion Nybegynder
26. juli 2005 - 20:37 #9
kæft i er gale. :) :)

Roenving gør det noget at jeg bruger det på min side, som en sjov ting?? ;)
Avatar billede blackscorpion Nybegynder
26. juli 2005 - 20:45 #10
roenving -> hvor meget arbejde ville det kræve, hvis man spurgte efter en enter og en retur knap?? ;)
Muligvis en shift. lol :P
Avatar billede blackscorpion Nybegynder
26. juli 2005 - 20:47 #11
okey glem enter knappen. ;)
Avatar billede roenving Novice
26. juli 2005 - 21:25 #12
Shift-tingen gad jeg ikke lige lave, den kræver nemlig en hel del mere arbejde, men kan sådan set sagtens laves (faktisk på en hel række måder ...

-- linjeskift-tingen, hrm, tjah, bom, bom ...
Avatar billede roenving Novice
26. juli 2005 - 23:13 #13
>>blackscorpion

-- du er selvfølgelig ganske velkommen til at bruge den på din side, men den holder jo så kun som en sjov ting !-)

-- og så fik jeg en idé til at løse shift-tingen rimeligt nemt med:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="Generator" content="Stone's WebWriter 4">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
html,body{height:100%;margin:0px;border:0px;padding:0px;font-family:tahoma,verdana,arial,sans-serif;font-size:small;}
#tastatur td{padding:6px 10px;font-size:large;border:1px dotted green;width:1em;text-align:center;cursor:pointer;}
</style>
<script language="javascript" type="text/javascript">
var taster = new Array();
taster[0] = ['§\n½','!\n1','"\n2','#\n3','¤\n4','%\n5','&\n6','/\n7','(\n8',')\n9','=\n0','?\n+'];
taster[1] = ['Q\nq','W\nw','E\ne','R\nr','T\nt','Y\ny','U\nu','I\ni','O\no','P\np','Å\nå',''];
taster[2] = ['A\na','S\ns','D\nd','F\nf','G\ng','H\nh','J\nj','K\nk','L\nl','Æ\næ','Ø\nø','*\n\''];
taster[3] = ['>\n<','Z\nz','X\nx','C\nc','V\nv','B\nb','N\nn','M\nm',';\n,',':\n.','_\n-',''];//>
var shiftPressed = 2;

window.onload = function(){
  var t = document.getElementById('tastatur'),newTr,newTd,newTxt;
  var newTable = document.createElement('table');
  t.appendChild(newTable);
  var newTbody = document.createElement('tbody');
  newTable.appendChild(newTbody);
  for(i=0;taster.length>i;i++){
    newTr = document.createElement('tr');
    newTbody.appendChild(newTr);
    for(j=0;taster[i].length>j;j++){
      newTd = document.createElement('td');
      newTr.appendChild(newTd);
      newTxt = document.createTextNode(taster[i][j]);
      newTd.appendChild(newTxt);
      newTd.onclick = function(){addText(this,event);};
    }
  }
  newTr = document.createElement('tr');
  newTbody.appendChild(newTr);
  newTd = document.createElement('td');
  newTr.appendChild(newTd);
  newTxt = document.createTextNode("  ");
  newTd.appendChild(newTxt);
  newTd.onclick = function(){addText(this);};
  newTd.colSpan = taster[0].length;
  newTd.style.height = "20px";

  newTr = document.createElement('tr');
  newTbody.appendChild(newTr);
  newTd = document.createElement('td');
  newTr.appendChild(newTd);
  newTxt = document.createTextNode("Shift");
  newTd.appendChild(newTxt);
  newTd.onclick = function(){shiftPressed=2-shiftPressed;this.style.backgroundColor=shiftPressed==2?'white':'#cde'};
  newTd.colSpan = 3;
  newTd.style.height = "20px";
  newTd.style.border = "1px outset black";
 
  newTd = document.createElement('td');
  newTr.appendChild(newTd);
  newTxt = document.createTextNode("\n\n\n");
  newTd.appendChild(newTxt);
  newTxt = document.createTextNode("NewLine");
  newTd.appendChild(newTxt);
  newTd.onclick = function(){addText(this);};
  newTd.colSpan = 3;
  newTd.style.height = "20px";
  newTd.style.border = "1px outset black";
 
  newTd = document.createElement('td');
  newTr.appendChild(newTd);
  newTxt = document.createTextNode("Del");
  newTd.appendChild(newTxt);
  newTd.onclick = function(){var ta = document.getElementById('mitTextArea');ta.value=ta.value.substring(0,ta.value.length-1);};
  newTd.colSpan = 3;
  newTd.style.height = "20px";
  newTd.style.border = "1px outset black";
 
  newTd = document.createElement('td');
  newTr.appendChild(newTd);
  newTd.colSpan = taster[0].length - 9;
  newTd.style.cursor = "default";
}
function addText(elm){
  var ta = document.getElementById('mitTextArea');
  str = elm.firstChild.nodeValue.split("");
  ta.value += str[0]?str[shiftPressed]:"";
  ta.focus();
}
</script>
<title>Onscreen tastatur</title>
</head>

<body>
<textarea id="mitTextArea" cols="50" rows="10"></textarea>
<div id="tastatur"></div>
</body>

</html>
Avatar billede roenving Novice
26. juli 2005 - 23:30 #14
Hov, jeg fik ikke fjernet noget fra en lapsus, så ændr

      newTd.onclick = function(){addText(this,event);};

til:

      newTd.onclick = function(){addText(this);};

-- ellers giver den nemlig fejl i Gecko'erne ...
Avatar billede blackscorpion Nybegynder
26. juli 2005 - 23:33 #15
gal du er for meget. ;) ;)
Avatar billede blackscorpion Nybegynder
26. juli 2005 - 23:35 #16
roenving -> sig mig, hvordan kan man sætte sig ned og "bare" lige løse det??

enter knappen var ganske simpel.. jeg tilføjede bare \n i et tomt felt i højre side.

Godt nok stod der ikke noget på knappen, men den virkede. ;)
Avatar billede blackscorpion Nybegynder
26. juli 2005 - 23:39 #17
hov... din spacebar virker ikke mere?? :(

den skriver "Undefined" og jeg HAR skiftet newTd.onclick = function(){addText(this.event);}; til newTd.onclick = function(){addText(this);}; :P
Avatar billede roenving Novice
26. juli 2005 - 23:40 #18
-- det er så principielt også det jeg gør, jeg ville bare gerne vise noget meningsfuldt på en linjeskift-tast ...

-- og faktisk skrev jeg hele koden til den første udgave lige ind i min editor, opdagede så, da jeg ville teste, at jeg havde glemt et d i en appendChild, men ellers kørte den bare ...
Avatar billede roenving Novice
26. juli 2005 - 23:41 #19
Det gør den hos mig, og i alle mine browsere ?-)
Avatar billede roenving Novice
26. juli 2005 - 23:43 #20
-- og en meget lang linje burde så lige laves lidt længere:

  newTd.onclick = function(){var ta = document.getElementById('mitTextArea');ta.value=ta.value.substring(0,ta.value.length-1);ta.focus();};

(det er del-tasten !-)
Avatar billede blackscorpion Nybegynder
26. juli 2005 - 23:46 #21
dette er koden jeg har hvor jeg får en undefined når jeg tæsker space.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="Generator" content="Stone's WebWriter 4">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
html,body{height:100%;margin:0px;border:0px;padding:0px;font-family:tahoma,verdana,arial,sans-serif;font-size:small;}
#tastatur td{padding:6px 10px;font-size:large;border:1px dotted green;width:1em;text-align:center;cursor:pointer;}
</style>
<script language="javascript" type="text/javascript">
var taster = new Array();
taster[0] = ['§\n½','!\n1','"\n2','#\n3','¤\n4','%\n5','&\n6','/\n7','(\n8',')\n9','=\n0','?\n+'];
taster[1] = ['Q\nq','W\nw','E\ne','R\nr','T\nt','Y\ny','U\nu','I\ni','O\no','P\np','Å\nå',''];
taster[2] = ['A\na','S\ns','D\nd','F\nf','G\ng','H\nh','J\nj','K\nk','L\nl','Æ\næ','Ø\nø','*\n\''];
taster[3] = ['>\n<','Z\nz','X\nx','C\nc','V\nv','B\nb','N\nn','M\nm',';\n,',':\n.','_\n-',''];//>
var shiftPressed = 2;

window.onload = function(){
  var t = document.getElementById('tastatur'),newTr,newTd,newTxt;
  var newTable = document.createElement('table');
  t.appendChild(newTable);
  var newTbody = document.createElement('tbody');
  newTable.appendChild(newTbody);
  for(i=0;taster.length>i;i++){
    newTr = document.createElement('tr');
    newTbody.appendChild(newTr);
    for(j=0;taster[i].length>j;j++){
      newTd = document.createElement('td');
      newTr.appendChild(newTd);
      newTxt = document.createTextNode(taster[i][j]);
      newTd.appendChild(newTxt);
      newTd.onclick = function(){addText(this);};
    }
  }
  newTr = document.createElement('tr');
  newTbody.appendChild(newTr);
  newTd = document.createElement('td');
  newTr.appendChild(newTd);
  newTxt = document.createTextNode("  ");
  newTd.appendChild(newTxt);
  newTd.onclick = function(){addText(this);};
  newTd.colSpan = taster[0].length;
  newTd.style.height = "20px";

  newTr = document.createElement('tr');
  newTbody.appendChild(newTr);
  newTd = document.createElement('td');
  newTr.appendChild(newTd);
  newTxt = document.createTextNode("Shift");
  newTd.appendChild(newTxt);
  newTd.onclick = function(){shiftPressed=2-shiftPressed;this.style.backgroundColor=shiftPressed==2?'white':'#cde'};
  newTd.colSpan = 3;
  newTd.style.height = "20px";
  newTd.style.border = "1px outset black";

  newTd = document.createElement('td');
  newTr.appendChild(newTd);
  newTxt = document.createTextNode("\n\n\n");
  newTd.appendChild(newTxt);
  newTxt = document.createTextNode("NewLine");
  newTd.appendChild(newTxt);
  newTd.onclick = function(){addText(this);};
  newTd.colSpan = 3;
  newTd.style.height = "20px";
  newTd.style.border = "1px outset black";

  newTd = document.createElement('td');
  newTr.appendChild(newTd);
  newTxt = document.createTextNode("Del");
  newTd.appendChild(newTxt);
  newTd.onclick = function(){var ta = document.getElementById('mitTextArea');ta.value=ta.value.substring(0,ta.value.length-1);};
  newTd.colSpan = 3;
  newTd.style.height = "20px";
  newTd.style.border = "1px outset black";

  newTd = document.createElement('td');
  newTr.appendChild(newTd);
  newTd.colSpan = taster[0].length - 9;
  newTd.style.cursor = "default";
}
function addText(elm){
  var ta = document.getElementById('mitTextArea');
  str = elm.firstChild.nodeValue.split("");
  ta.value += str[0]?str[shiftPressed]:"";
  ta.focus();
}
</script>
<title>Onscreen tastatur</title>
</head>

<body>
<textarea id="mitTextArea" cols="50" rows="10"></textarea>
<div id="tastatur"></div>
</body>

</html>
Avatar billede roenving Novice
26. juli 2005 - 23:49 #22
Der mangler et tegn i denne linje:

  newTxt = document.createTextNode("  ");
Avatar billede blackscorpion Nybegynder
26. juli 2005 - 23:49 #23
får samme fejl på spacebaren i mozilla. :(
Avatar billede roenving Novice
26. juli 2005 - 23:50 #24
Hrm, det er Eksperten, som spiser et mellemrum, for der skal være tre !-)
Avatar billede blackscorpion Nybegynder
26. juli 2005 - 23:52 #25
hvorfor kan jeg ikke lige finde den linie?? har du et linienummer?
Avatar billede blackscorpion Nybegynder
26. juli 2005 - 23:52 #26
ahh 3. okey så har jeg fundet den. ;)
Avatar billede blackscorpion Nybegynder
26. juli 2005 - 23:52 #27
sådan... perfekt. ;)
Avatar billede blackscorpion Nybegynder
26. juli 2005 - 23:53 #28
så mangler vi bare lige at man så kan skifte til russiske, asiasiske, arabiske og ... øhhh... Enuk'isk? :P :P :P
Avatar billede roenving Novice
26. juli 2005 - 23:54 #29
*rotflmao*
Avatar billede blackscorpion Nybegynder
26. juli 2005 - 23:54 #30
øhhh tegn skulle der stå i enden. :P
Avatar billede blackscorpion Nybegynder
26. juli 2005 - 23:55 #31
hvis du har nogen som helst forstand på php/mysql må du MEGET gerne lige tage et kig på: http://www.eksperten.dk/spm/635070 :)
Avatar billede roenving Novice
26. juli 2005 - 23:55 #32
-- faktisk er det ikke særligt svært, for man skal bare oprette en ekstra dimension i arrayet, og så sætte en parameter ind !-)
Avatar billede blackscorpion Nybegynder
26. juli 2005 - 23:57 #33
nu kan det godt være jeg er besværlig... men det virker PERFEKT i IE, men Firefox Mozilla kan ikke skrive, kun lave mellemrum, slette og skifte linie? lol :P
Avatar billede blackscorpion Nybegynder
26. juli 2005 - 23:58 #34
roenving.. du kan lige vove på at gøre det.. syntes du har blæret dig nok for én dag. :P
Avatar billede roenving Novice
26. juli 2005 - 23:58 #35
Har du fjernet den event-ting, for den var stadig i den kode du viste sidst !-)
Avatar billede blackscorpion Nybegynder
27. juli 2005 - 00:00 #36
*begynder at fløjte*

smut nu bare over på http://www.eksperten.dk/spm/635070 :P

*ROTFLMAOUIPIMP*
Avatar billede roenving Novice
27. juli 2005 - 00:02 #37
-- men php har jeg ingen ordentlig forstand på, så der renoncerer jeg !-)
Avatar billede blackscorpion Nybegynder
27. juli 2005 - 00:03 #38
bummer... hvis du har læst mit spørgsmål, ved du så om det er muligt at lave det i javascript, som arbejder sammen med en mysql database?
Avatar billede Slettet bruger
27. juli 2005 - 19:38 #39
roenving: Synes du ikke den her fortjener at komme op på din hvide hat?
Avatar billede roenving Novice
28. juli 2005 - 02:25 #40
Tjoh, men desværre har jeg nogen tanker om det konceptuelle i noget menu-struktur, som jeg ikke har fået check på endnu !-)
Avatar billede clalar Nybegynder
28. juli 2005 - 21:51 #41
hmmm
Avatar billede roenving Novice
28. juli 2005 - 21:52 #42
?-)
Avatar billede clalar Nybegynder
28. juli 2005 - 21:56 #43
Tak for hjælpen og interessen roenvig - scriptet virker fint... Det er noget siden, jeg har stillet spørgsmål her på eksperten, så jeg kan ikke huske, hvordan jeg giver dig pointene???
Avatar billede roenving Novice
28. juli 2005 - 21:59 #44
Det kan du nu, hvor jeg har lagt et svar !-)

Markér mit navn i boksen til venstre og tryk på Acceptér !o]

Velbekomme '-)
Avatar billede roenving Novice
29. juli 2005 - 11:07 #45
-- og tak for point ;~}
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