Avatar billede lunddata Nybegynder
24. december 2008 - 13:04 Der 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.
Avatar billede nwn Nybegynder
24. december 2008 - 22:17 #1
Felterne kan "låses" ved at disable dem, altså nærmest gøre dem utilgængelige.

Mon ikke dette var noget?:

<script language="JavaScript">
function afslut()
{
document.getElementById('felt1').disabled = 'true';
document.getElementById('felt2').disabled = 'true';
document.getElementById('felt3').disabled = 'true';
}
</script>

<input type="text" id="felt1" value="Tekst"><br>
<input type="text" id="felt2" value="Tekst"><br>
<input type="text" id="felt3" value="Tekst">

<input type="button" value="Afslut" onClick="afslut()">

Ø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.
Avatar billede lunddata Nybegynder
25. december 2008 - 22:31 #2
Jeg tester.
Man skal åbenbart forbi allle input felter og for hver af dem bruge:
<input type="text" id="felt1" value="Tekst"><br>


Scriptet virker, men kan jeg få det til at virke med radiobutton, som først retter opgaverne og dernæst får den til at låse som ønsket her i spm.?

altså disse to kobles sammen:

<input name="p2A1" type="radio" value="2"                  onclick="recalc_onclick('p2A1')" tabindex="52">

<input type="button" value="Afslut" onClick="afslut()">

.... (hvor selvfølgelig den sidste button er radiobutton)
Avatar billede lunddata Nybegynder
25. december 2008 - 22:45 #3
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';
Avatar billede nwn Nybegynder
26. december 2008 - 02:53 #4
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?

<input name="p2A1" type="radio" value="2" onclick="recalc_onclick('p2A1'); afslut()" tabindex="52"> Afslut
Avatar billede lunddata Nybegynder
26. december 2008 - 11:49 #5
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.
Avatar billede lunddata Nybegynder
26. december 2008 - 11:53 #6
Helt præcist får jeg denne fejlmelding:
'document.getElementById(....)' er null eller ikke et objekt
Avatar billede olebole Juniormester
26. december 2008 - 17:32 #7
<ole>

document.getElementById('felt' + i).disabled = 'true';

- 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  =)

/mvh
</bole>
Avatar billede lunddata Nybegynder
27. december 2008 - 12:19 #8
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.
Avatar billede nwn Nybegynder
27. december 2008 - 14:41 #9
Hej.

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.

Og så kan din radiobutton se således ud:

<input name="p2A1" type="radio" value="2" onclick="bekraeftelse()" tabindex="52">
Avatar billede lunddata Nybegynder
27. december 2008 - 22:05 #10
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.
Avatar billede lunddata Nybegynder
27. december 2008 - 22:35 #11
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?
Avatar billede nwn Nybegynder
27. december 2008 - 23:24 #12
Ja det kan sagtens fikses.

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.
Avatar billede lunddata Nybegynder
28. december 2008 - 12:41 #13
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;
Avatar billede nwn Nybegynder
28. december 2008 - 16:56 #14
Jeps, husk lige id="ja" inde i den, med mindre du allerede har det.

<input name="p2A1" id="ja" type="radio" value="2" onclick="bekraeftelse()" tabindex="52">

Og så har jeg skrevet en fejl. Det skal ikke være:

document.GetElementById("ja").checked = false;

Men derimod med lille G (get og ikke Get):

document.getElementById("ja").checked = false;

Så skulle det gerne virke.
Avatar billede lunddata Nybegynder
28. december 2008 - 17:26 #15
Nej, hvor det kører...
Det kan ikke være mere perfekt!!!!!!!!!!!!!!!!!!!!!!!
Avatar billede nwn Nybegynder
28. december 2008 - 17:50 #16
Det lyder godt, og tak for points (:
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