24. december 2008 - 13:04Der er
15 kommentarer og 1 løsning
Låse inputfelter
I spørgsmål http://www.eksperten.dk/spm/434956 har jeg set, at det er muligt at låse alle inputfelter. Jeg har ikke ret meget begreb om JavaScript, og jeg ved det er meget speciel programmering og fylder meget, når jeg anvender Spreadsheetconverter for at lave excel til html. I praksis virker det bare meget godt til det jeg har brug for. Jeg sukker dog rigtig meget efter en mulighed for at låse indtastningsfelter i f.eks. http://sysform.dk/Opgavertilskaerm/Broekadditionskaerm/Broekadditionskaerm.htm, når der med radiobutton i bunden af siden svares ja til at ville rette opgaverne. I test af elever skal eleven kun have én chance for at rette indtastede svar og har eleven valgt at afslutte og rette må der ikke kunne indtastes nye svar. De to knapper (Nulstil og Udskriv) foroven på siden skal altid kunne aktiveres.
Jeg sidder og får ret så mange grå hår, fordi jeg som sagt ikke ved nok om script. Er der ikke en venlig sjæl som kan hjælpe mig på vej.
Øverst starter vi javscript, hvor vi så inden i, laver en funktion som vi kalder afslut.
Funktionen er lavet således, at når den køres, så disables felterne med id "felt1" "felt2" og "felt3".
Vi indsætter så felterne længere nede, og giver dem det id de skal have, og så er der lavet en knap, der ved onClick (Ved at klikke på den) kører funktionen afslut.
Grunden til at parenteserne () også er med, er fordi man så kan sende data når funktionen køres. Det er ikke nødvendigt i dette tilfælde.
Vrøvl! I ovenstående skulle der selvfølgelig i de første linier stå: Man skal åbenbart forbi allle input felter og for hver af dem bruge: document.getElementById('felt1').disabled = 'true';
Nej, du behøver skam ikke køre sådan en linie for hver. Det var blot for at give et lidt bedre overblik.
Du kan lave en så kaldt while, altså et loop, som vil kører felterne igennem. Jeg har sat det sammen således:
<script language="JavaScript"> function afslut() { var i = 1;
while (i <= 3) { document.getElementById('felt' + i).disabled = 'true'; i++; } } </script>
Igen har vi funktionen afslut(). Inde i den, har lavet en variabel kaldt i og defineret den til at være = 1; Dvs variablens indhold er 1. Eftersom den kun indeholder tal, behøves der ikke kommes gåsetegn rundt omkring indholdet.
Vi kører så den så kaldte while (loop), som kører, så længe 3 er større eller lig med vores variables indhold. For hvergang indholdet af loopet har kørt, disables inputfeltet med id "felt" og så variablens indhold altså et tal. Dernæst plusses variablen med 1 (i++;)
Dvs. at i det her tilfælde, vil inputfeltet med id felt1 startes med at blive disabled. Herefter vil feltet med id felt2 og så felt3.
Alt efter hvor mange felter du skal bruge, så ændre du på tallet 3 du ser inde i whilen, til det antal felter du har ;) Og så må du huske at navngive felterne felt1, felt2, felt3, felt4 osv.
Jeg er ikke sikker på jeg forstår dit andet spg. korrekt. Skal opgaverne rettes og input felterne skal låses, i det man trykker på radioknappen?
Ser rigtig godt ud. Det er korrekt at opgaverne skal rettes og derefter skal felterne låses.
Denne virker med hensyn til at rette, men ikke med hensyn til at felterne låses: <input name="p2A1" type="radio" value="2" onclick="recalc_onclick('p2A1'); afslut()" tabindex="52"> Afslut
Jeg får fejl i document.getElementById, så det må være feltnavnene det er galt i. Mine feltnavne er oversat fra Excel og f.eks kolonne I hedder nedefter startende med celle I1 til og med celle I5: p2I1, p2I2, p2I3, p2I4, p2I5. Celle c3 hedder således p2C3. Da besvarelserne i mine opgaver er i kolonner i regneark, må jeg kunne udnytte dette i javascriptet: <script language="JavaScript"> function afslut() { var i = 1;
while (i <= 3) { document.getElementById('felt' + i).disabled = 'true'; i++; } } </script> hvor felt udskiftes første celle i f.eks. kolonne I nemlig p2I1. Det kan godt være at eleven ikke har skrevet noget i én af svarfelterne (dvs. at værdien her nok opfattes som nul). Men altså jeg får fejl i scriptets feltnavn.
- forudsætter jo, du har felter med ID'er på formen 'felt1', 'felt2', felt3', osv. Det synes ikke at være tilfældet.
Om du overhovedet har en chance for at lave et ordentligt script til den gang pløre, du får ud af spreadsheet konverteringen, orker jeg ikke at finde ud af - men jeg ville nok prøve at finde en anden indgang til problemet =)
Hej nwn! Jeg TAKKER MANGE GANGE for din store hjælp. Jeg bruger scriptet function afslut() { document.getElementById('p2I3').disabled = 'true'; document.getElementById('p2I4').disabled = 'true'; document.getElementById('p2I6').disabled = 'true'; osv............ } </script> ... det er slet ikke så slemt at indsætte de nøjagtige feltnavne(jeg kigger jo bare tilbage i mit regneark og finder cellenavnene) For at gøre det helt perfekt mangler jeg bare en "fortryde" mulighed ved knappen for afslut (altså noget med "er du sikker på at du vil afslutte?) Hvordan dette laves må jeg prøve at finde ud, men ellers vender jeg tilbage, da det jo ikke var med her i mit oprindelige spm.
Mht. sådan noget "Er du sikker?" så kan du lave en confirm (bekræftelse), også i Javascript.
Da denne radiobutton i forvejen kører 2 funktioner, altså rette funktionen og låse funktionen, så ville jeg mene at det smarteste ville være, at lave bekræftelsen i en ny funktion.
<script language="JavaScript"> function bekraeftelse() { var spm = confirm("Er du sikker på, at du vil afslutte?") if (spm) { recalc_onclick("p2A1"); afslut(); } } </script>
Med funktionen her oven over, vil der komme en lille popup boks hvor der i dette tilfælde, vil stå "Er du sikker på du vil afslutte?" Trykkes der OK, så køres funktionerne recalc_onclick("p2A1"); og afslut(); og trykkes der Annuller, så kan vedkommende fortsætte.
Samtidig med denne funktion, har du også rette funktionen og låse funktionen inde i dokumentet selvfølgelig.
Det er simpelthen bare sagen. Hvad kan jeg ønske mere? Jeg har fået mere foræret end jeg egentlig havde spurgt til i første omgang. Jeg TAKKER endnu en gang nwn for dine meget konstruktive og brugbare løsninger. Dine scripts vil og kan jeg bruge fremover.
Ved ikke om jeg skal oprette et nyt spm. men hvis jeg nu annullerer <input name="p2A1" type="radio" value="2" onclick="bekraeftelse()" tabindex="52"> så vil radiobutton stå som aktiv (altså markeret). Kan dette fjernes?
Hvis du har en radioknap hvor der står "Nej" nej udfra, så skal den lige have et id først. F.eks:
<input type="radio" name="afslut" id="nej">
Herefter ændre vi funktionen bekraeftelse, så den kommer til at se således ud:
<script language="JavaScript"> function bekraeftelse() { var spm = confirm("Er du sikker på, at du vil afslutte?") if (spm) { recalc_onclick("p2A1"); afslut(); } else { document.GetElementById("nej").checked = true; } } </script>
Hvis du derimod ikke har en "nej" radioknap, så det blot er en "ja" radioknap, så skal du lige have givet denne radioknap et id, f.eks "ja" og så kommer funktionen til at se sådan ud:
<script language="JavaScript"> function bekraeftelse() { var spm = confirm("Er du sikker på, at du vil afslutte?") if (spm) { recalc_onclick("p2A1"); afslut(); } else { document.GetElementById("ja").checked = false; } } </script>
Det vi har ændret på funktionen giver nogenlunde sig selv. Hvis man jo siger OK til bekræftelses boksen der kommer, så kører den rette og afslut funkionen, men trykker man Annuller så køres } else { og koden nedenunder, som også giver sig selv.
Kan ikke lige få det til at virke. Jeg bruger denne til radio button <input name="p2A1" type="radio" value="2" onclick="bekraeftelse()" tabindex="52"> og jeg kan få scriptet til at køre hvis jeg bekræfter, men ikke når jeg annullerer, så får jeg fejl i document.GetElementById("ja").checked = false;
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.