Avatar billede gurly Praktikant
27. januar 2008 - 03:05 Der 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()"

(jeg har IKKE brug for en synlig submit knap)
Avatar billede w13 Novice
27. januar 2008 - 03:19 #1
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>
Avatar billede w13 Novice
27. januar 2008 - 03:20 #2
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>
Avatar billede gurly Praktikant
27. januar 2008 - 03:31 #3
den køre nu scriptet uanset hvilken tastaturknap jeg trykker på ?
Avatar billede gurly Praktikant
27. januar 2008 - 08:11 #4
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>

<SCRIPT type="text/javascript"><!--
function fireon() {
    script1();
    script2();
    script3();
}
//-->
</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 ?
Avatar billede gurly Praktikant
27. januar 2008 - 08:25 #5
PS. håber du vil / kan hjælpe, ellers kan jeg godt sætte det op i nyt / nye spørgsmål
Avatar billede gurly Praktikant
27. januar 2008 - 09:02 #6
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 ?
Avatar billede w13 Novice
27. januar 2008 - 12:11 #7
Det var meget læsning og mange spørgsmål. =)

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. =)
Avatar billede olebole Juniormester
27. januar 2008 - 14:09 #8
<ole>

- og en switch er faktisk dramatisk meget bedre performende end en række if-sætninger:

switch (iKey) {
    case 32:
        // Gør noget, hvis iKey==32
    break;

    case 13:
        // Gør noget, hvis iKey==13
    break;

    case 9:
        // Gør noget, hvis iKey==9
    break;

    default:
        // Gør noget, hvis ingen anden betingelse er opfyldt
}

/mvh
</bole>
Avatar billede gurly Praktikant
27. januar 2008 - 15:15 #9
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 ?
Avatar billede gurly Praktikant
27. januar 2008 - 15:21 #10
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
Avatar billede olebole Juniormester
27. januar 2008 - 17:10 #11
<script type="text/JavaScript">
function doDaKeyStuff(e){
    var e = e ? e : event;
   
    // Check evt. andre tegn ved at slette kommentaren i næste linje
    //return alert(e.keyCode)
   
    switch (e.keyCode) {
        case 13: // Return
            alert("Return: " + e.keyCode);
        break;
       
        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>
Avatar billede olebole Juniormester
27. januar 2008 - 17:12 #12
- og kommentaren burde have lydt:

    // Følgende linjer skal kun medtages,
    // hvis default handlingen ikke skal udløses
    // - og event'en ikke skal boble op i DOM-hierakiet
Avatar billede gurly Praktikant
27. januar 2008 - 17:34 #13
olebole > jeg kan desværre ikke overskue hvordan det skal bruges
ville hellere have det fra w13 til at virke med lidt mere end 2 knapper
Avatar billede gurly Praktikant
27. januar 2008 - 17:48 #14
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
Avatar billede olebole Juniormester
27. januar 2008 - 20:04 #15
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)
Avatar billede w13 Novice
27. januar 2008 - 20:48 #16
Ja, tag de fleste point selv, qurly.
Avatar billede gurly Praktikant
27. januar 2008 - 21:34 #17
PS

angående mine select bokse
som jo ser sådan her ud >

<select name="subindex" id="subindex"
<option>tekst</option>
</select>

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 >

<SCRIPT type="text/javascript"><!--
function help() {
window.open('help.htm','','toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, width=520, height=300,left=100, top=130'); return false;
}
//-->
</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 ?
Avatar billede olebole Juniormester
27. januar 2008 - 22:07 #18
1) Der er ikke nogen JavaScript-metode, der kan åbne en select  :o|

2) Alle popups, der ikke åbnes ved et brugerklik, blokkeres
Avatar billede olebole Juniormester
27. januar 2008 - 22:08 #19
- og nej, der er ikke nogen mulighed for at 'mildne' nogen  :)
Avatar billede gurly Praktikant
27. januar 2008 - 22:38 #20
Angående select boksen >
tænkte bare på, kan man ikke få den til at skifte keycode
noget i retning af >

        case 9: // Tab
            switch(window.event.keyCode){case 18 : return;}
        break;

hvis man kunne det kunne man måske også få den til at kalde 2 keycoder for
ALT + PilOP

måske noget i retning af >

        case 9: // Tab
            switch(window.event.keyCode){case 18 : case 46 : return;}
        break;

ikke fordi det her virker, men du forstår nok hvor jeg vil hen,
er det også noget der tilhører fantasi verdenen  c",)
Avatar billede olebole Juniormester
27. januar 2008 - 22:45 #21
Jeg ved helt, hvad du vil. Det kunne man for år tilbage i IE, men da det er et alvorligt sikkerhedshul, blev det stoppet  :)
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