27. januar 2008 - 03:05Der er
18 kommentarer og 3 løsninger
få den til at submitte ved tast på enter
Dette her skal bruges til noget tastatur styring af en webside jeg har understående selectboks, som indeholder et subindex når bruger ved hjælp af alt+x og brug af pile taster har valgt en option i boksen, og han derefter klikke på enter på tastaturet, så skal den køre scriptet "script1()"
<select name="subindex" id="subindex" accesskey="x" onsubmit="script1();"> <option>Denne tekst er valgt og markeret</option> </select>
Altså når der er markeret en tekst i boksen, så skal den ved tast på enter knap på tastatur køre "script1()"
Dette burde gøre det: -------------------------- <script type="text/javascript" language="javascript"> function Enter(e){if(event.keyCode==13)return true;return false} </script>
<select name="subindex" id="subindex" accesskey="x" onkeypress="if(Enter())Script1()"> <option>Denne tekst er valgt og markeret</option> </select>
Det kan selvfølgelig også bare være: ---------------------------------------- <select name="subindex" id="subindex" accesskey="x" onkeypress="function(e){if(event.keyCode==13)Script1()}"> <option>Denne tekst er valgt og markeret</option> </select>
Hej w13 efter at have fejlsøgt lidt på det, så kom jeg frem til følgende > fejlen opstod fordi jeg lagde mere end et script ind den skulle køre altså script1():script2():scripr3() klikkede man på enter så kørte den fint alle 3 script men klikkede man på en hver anden tast, så kørte den nogle af scriptne ! meget underligt ! fandt dog ud af at løse det ved at lægge de 3 script ind i et script / en funktion som jeg så kunne kalde fra koden.
men nu har jeg fundet på noget helt andet håber meget at du vil hjælpe mig lidt, jeg har til overflod af javascript på siden og mange funktioner jeg gerne vil tastaturstyre, det vil blive for omfattende at forklare alt, så håber du vil forstå mine brudstykker.
for det første så var det upraktisk at bruge enter knappen fordi den bruges til at lukke select menu´erne så nu er det mellemrums tasten vi går ud fra
Vi glemmer også lige den select boks lidt, for det gør intet at scriptet kan køre hele tiden
har fundet frem til følgende >
<body onkeypress="KeyPress()">
<script type="text/javascript"><!-- function KeyPress() { if (window.event.keyCode == 32) fireon(); } //--></script>
og det fungere glimrende, men hvad nu hvis jeg gerne vil have den til at tjekke en tast mere og så køre et andet script ? har forsøgt med følgende >
<script type="text/javascript"><!-- function KeyPress() { if (window.event.keyCode == 32) fireon(); if (window.event.keyCode == 44) fireof(); } //--></script>
Men det er jo forkert, hvordan gør jeg rigtigt ?
et andet spørgsmål er at hvorfor har du følgende med i din kode > (e) og return true;return false} disse ting er ikke med i koden jeg bruger nu, men hvad gør de ting ?
et ottende spørgsmål er så > andengående mine select bokse, jeg bruger jo eksempelvis accesskey="z" på dem, men så skal man først klikke ALT + Z for at markere boksen og derefter kan boksen åbnes helt ved at trykke ALT + pil op altså i alt 4 tastetryk for at åbne en menu kan det gøres lettere ? Kan jeg styre en selectboks med en hotkey tæmker på noget ala det her >
<script type="text/javascript"><!-- function KeyPress() { if (window.event.keyCode == 20) var w = document.getElementById('subindex'); w = OG HVAD SKAL DER SÅ STÅ HER ? ? ? } //--></script>
select boksen har jo så id = subindex kan jeg få boksen til at blive markeret af scriptet, eller aller helst ligefrem bliver åbnet ?
PS så har jeg fundet den her der kan vise taste koden>
<html> <head> <title>keyCode example</title>
<script type="text/javascript">
function showKeyCode(e) { alert("keyCode for the key pressed: " + e.keyCode + "\n"); }
</script> </head>
<body onkeydown="showKeyCode(event);"> <p>Press any key.</p> </body> </html>
Men hvorfor et det kun koderne fra enter tast og mellemrums tast jeg kan bruge ? alle andre tastekoder virker ikke ? er det kun nogle taster der kan bruges ?
Først og fremmest: grunden til, at den altid kørte nogle af funktioner, var at jeg ikke havde givet if-sætningen en blok {} Uden en blok kører if-sætningen kun den første kommando, og da de næste kommandoer er uden for if'en, bliver de altid kørt. Ellers skulle den have set sådan her ud: if(Enter()){Script1();Script2();Script3} og ikke bare: if(Enter())Script1();Script2();Script3 (som resulterer i dit problem!)
Næste spørgsmål: hvordan du laver javascriptfunktionerne ordentligt? Du kan bare gøre sådan her: --------------------------------- <body onkeypress="KeyPress()">
<script type="text/javascript"><!-- function KeyPress(){ if(window.event.keyCode==32){fireon()} }
function fireon(){ script1(); script2(); script3(); } //--> </SCRIPT> --------------------------------- Og skal der være flere taster mulige, er dit eksempel ikke helt hen i vejret, men jeg ville nok bruge "else if" i stedet for "if" til det andet "tastetjek": --------------------------------- <body onkeypress="KeyPress()">
<script type="text/javascript"><!-- function KeyPress(){ var iKey=window.event.keyCode; if(iKey==32){fireon()} else if(iKey==){fireon2()} }
function fireon(){ script1(); script2(); script3(); } //--> </SCRIPT> --------------------------------- (Dit eksempel var i øvrigt ikke forkert, som du mente.)
Næste spørgsmål: (e) i koden behøver du ikke, det var et levn fra en gammel kode. Og return brugte vi kun, fordi den blev kaldt fra selecten. Når man bruger: return "værdi" så stopper funktionen og returnerer værdien. Så derfor kunne jeg gøre sådan her: if(Enter()==true){alert('Funktionen returnerede True')}else{alert('Funktionen returnerede False')} Jeg kørte så bare Script1(), når den var True.
Næste spørgsmål: Nej, det kan vist ikke gøres meget lettere end det. Og jeg tror heller ikke, der er nogen med behov for, at det bliver 2 taster i stedet for 4. =) Du er vist nede i petitesser der, tror jeg. Du kan vist godt sætte "selectboks".focus(); på den ved et tastetryk, men det åbner den ikke. Jeg forstår ikke, hvor du vil hen med denne kode (husk dog {}-blokken, når if'en skal udføre flere kommandoer!): -------------------------------------- <script type="text/javascript"><!-- function KeyPress() { if (window.event.keyCode == 20) var w = document.getElementById('subindex'); w = OG HVAD SKAL DER SÅ STÅ HER ? ? ? } //--></script> --------------------------------------
Sidste spørgsmål: man kan sagtens lave en kode, der viser alle taster. Hvorfor din kun viser enter og mellemrum, ved jeg ikke. Dog bruger jeg selv denne, der virker fint med alle taster: -------------------------------------- <body onkeydown="showkey(event.keyCode)">
<script type="text/javascript" language="javascript"> function showkey(sKey) { alert(sKey); } </script> -------------------------------------- Håber du har fået svar på dine spørgsmål. =)
Takker ind til videre (skal lige have kigget på det først)
Jo min kode viser også alle koderne for de forskellige taster problemet opstår når så jeg skal bruge tastekoderne så kan jeg ikke få dem til at virke i scriptet jeg kan få kode 13 til at virke (enter) og kode 32 virker også (mellemrumstast) men koder for alle andre knapper kan jeg ikke få til at virke bruger jeg eksempelvis kode 83 for s tasten, så sker der absolut ingen ting når jeg trykker på tasten ?
altså "test af tastekoder" virker fint, jeg kan sagtens teste hvilken kode en given knap her. Men jeg kan ikke bruge dem i scriptet på min side, kun enter og mellemrums tast alle andre taster nægter at fungere
case 32: // Spacebar alert("Spacebar: " + e.keyCode); break;
case 9: // Tab alert("Tab: " + e.keyCode); break;
case 65: // a alert("a: " + e.keyCode); break; }
// Følgende linjer skal kun medtages, // hvis default handlingen ikke skal udløses if (e.stopPropagation) e.stopPropagation(); if (e.preventDefault) e.preventDefault(); e.cancelBubble = true; e.returnValue = false; return false; } document.onkeydown = doDaKeyStuff; </script>
olebole > Efter at have kigget lidt mere på det, så fandt jeg ud af det og ja det virker bedre, da det virker med alle taster Smider du et svar, så kan i dele, da w13´s svar faktisk virkede ok til mit oprindelige spørgsmål
Jaja, der er jo nok at dele - men nøjes med at give mig 30. Såvidt jeg umiddelbart kan se, var den eneste fejl i w13's 'onkeypress', hvis event-objekt er lidt anderledes skruet sammen end 'onkeydown' ;o)
så droppede jeg helt "tabindex" og fik i stedet olebole´s script til at kalde på følgende script >
<script type="text/javascript"><!-- function sub() { var w = document.getElementById('subindex'); w.focus(); } //--></script>
Dette får så markeret min select boks ved kun et enkelt tast og da jeg til mine to bokse har valgt tasterne pil højre og pil venstre, så er det let at bruge for pil op og pil ned skifter jo indholdet i boksene, og faktisk kan man trykke på bogstaver der så virker som genveje til menuer i boksene hvor den funktion så kommer fra ved jeg ikke men smart er det. Så jeg syntes bestemt ikke det er petitesser c",)
men så er så spørgsmålet, kræver sådan en boks virkelig tastetryk ALT+Pil OP for at man kan få den åbnet, er der slet ikke andre muligheder ?
et andet spørgsmål er at jeg har en "hjælp side" denne ville jeg gerne kunne åbne fra en "hotkey"
har prøvet at sætte den til at kalde på følgende script >
Men der syntes explorer jeg går over stregen, og blokere derfor vinduet jeg kan jo sagtens kalde scriptet fra en knap/link , men hvis jeg kalder på det fra hotkey scriptet, så blokerer den vinduet, det vil den ikke være med til. Kan jeg "mildne" vinduet på en eller anden måde, ved at bruge noget a href i stedet ? eller er det helt umuligt at få åbnet et vindue ud fra en hotkey ?
Jeg ved helt, hvad du vil. Det kunne man for år tilbage i IE, men da det er et alvorligt sikkerhedshul, blev det stoppet :)
Synes godt om
Ny brugerNybegynder
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.