24. marts 2015 - 17:34Der er
51 kommentarer og 1 løsning
Formen virker ikke
Hej Formen virker ikke. Tror det er fordi jeg ikke kan finde ud af at ramme "location" altså hvor resultat skal skrives.
Nogen der kan hjælpe?
(Formen skulle være afkrydsning af et antal spørgsmål - for hvert spørgsmål er 4 valgmuligheder - afhængig af hvilken der vælges sætter jeg vægt til ni forskellige muligheder - og resultatet skulle således gerne være hvor mange gange de ni valgmuligheder har fået en afkrydsning)
<script type="text/javascript">
function beregn(enea) { // tjeck felter et ad gangen. var t1 = 0; var t2 = 0; var t3 = 0; var t4 = 0; var t5 = 0; var t6 = 0; var t7 = 0; var t8 = 0; var t9 = 0; var t10 = 0; // 1 if(document.enea.spm1[0].checked) { t3++; } else if (document.enea.spm1[1].checked) { t5++; } else if (document.enea.spm1[2].checked) { t10++; } else if (document.enea.spm1[3].checked) { t2++; } else { // fejl.... alert('ups - spm 1') return false; } // 2 if(document.enea.spm2[0].checked) { t3++; } else if (document.enea.spm2[1].checked) { t5++; } else if (document.enea.spm2[2].checked) { t10++; } else if (document.enea.spm2[3].checked) { t7++; } else { // fejl.... alert('ups spm 2') return false; }
fejl 1: du tager ikke din form over, det nemmeste er at rette <INPUT onClick="java script:beregn(enea);" type=button value="Resultat af test" name=button> til <INPUT onClick="beregn(this.form);" type=button value="Resultat af test" name=button> så har du fat i formen, så kan du få fa i din value sådan
function beregn(enea) { alert(enea.a1.value);
jeg har omskrevet dit eks lidt, så du har noget at gå ud fra
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>demo</title> <style type="text/css"> </style> <script type="text/javascript"> function beregn(enea) { // alert(enea.a1.value); // tjek felter et ad gangen. var t1 = 0; var t2 = 0; var t3 = 0; var t4 = 0; var t5 = 0; var t6 = 0; var t7 = 0; var t8 = 0; var t9 = 0; var t10 = 0; // 1 if (enea.a1.value != "") { t3++; } else if (enea.a1.value == 1) { t5++; } else if (enea.a1.value == 2) { t10++; } else if (enea.a1.value == 3) { t2++; } else { // fejl.... alert('ups - spm 1') return false; } // 2 if (enea.b1.value != "") { t3++; } else if (enea.b1.value == 1) { t5++; } else if (enea.b1.value == 2) { t10++; } else if (enea.b1.value == 3) { t7++; } else { // fejl.... alert('ups spm 2') return false; }
Supert. jeg kigger på det med det samme og ser om jeg kan få det til at fungere. Flot svar. Nu skal vi så se om mine evner rækker til at manifistere dette i en løsning der virker... Jeg forsøger og vender tilbage.
Jeg forsøgte først at se resultat ved at komme følgende ned i bunden af koden - desværre vises resultat ikke - jeg forsøger noget andet. Men indspark modtages gerne.
DETTE ER SAT IND NEDERST I KODEN
<INPUT onClick="beregn(this.form);" type=button value="Resultat af test" name=button> </P> </FORM> HERUNDER SKAL RESULTAT VISES<BR><BR>
jeg ville gøre det mere simpelt at udskrive de 10 variable, ved at ligge dem som globale. normalt er jeg selv imod globale variable, men her er det det nemmeste, og så kan du afpudse senere, og lave en udskrivnings function
<style type="text/css"> </style> <script type="text/javascript"> var t1 = 0; var t2 = 0; var t3 = 0; var t4 = 0; var t5 = 0; var t6 = 0; var t7 = 0; var t8 = 0; var t9 = 0; var t10 = 0;
hvad nu hvis kun spm 1 og 2 er udfyldt ?? så vil de blive talt op, første gang og, når du retter fejlen med den manglende spm3, talt yderligere op.
løsning: reset værdierne af de 10 variable inden du retunere med false. da det er noget der skal kunne gøres flere steder fra, er det selvføgelig lagt i en function ( nulstil ) demo http://experten.olsensweb.dk/1002643/
for sjov skyld har jeg skrevet functioner på den alternative måde, som en del anvender.
så function beregn(enea) { kan også skrives som var beregn = function (enea) {
Det går jo flot fremad. Tror på at det kan lykkedes.
Fandt lige noget jeg undrede mig over
I Safari
Fejlmeddelse "Ups-spm 1" - Kommer selv om man har afkrydset spm 1. (Også hvis man afkrydser spm 1 og 2) - Fejlmeddelsen for svinder kun hvis man har afkrydset alle 3 muligheder.
Findes der ikke en anden løsning end "løsningen er at gå ind og disable din submit knap."
Dette gør nemlig at når jeg een gang har klikket på knappen "resultat af test" - ja så virker funktionen ikke mere - heller ikke hvis jeg opdatere siden.
Er der ikke en nem måde at rette den helt oprindelig kode så den virker.
Den har jo virket fint tidligere, men jeg har blot flyttet rundt og nu er der et eller andet som er gået galt - er der ikke et hurtigt fix af den oprindelige kode?
var nulstil_radio = function () { // her bør man måske også fjerne markeringen fra radio boxene var a1_box = document.enea.a1; for (i = 0, lng = a1_box.length; i < lng; i++) { if (a1_box[i].checked) { a1_box[i].checked = false; } } var b1_box = document.enea.b1; for (i = 0, lng = b1_box.length; i < lng; i++) { if (b1_box[i].checked) { b1_box[i].checked = false; } } var aa1_box = document.enea.aa1; for (i = 0, lng = aa1_box.length; i < lng; i++) { if (aa1_box[i].checked) { aa1_box[i].checked = false; } } }
Kan du få det til at virke med et hurtig fix vil det være supert - så kan jeg komme vifdere - og senere gå tilbage og lave koden bedre ud fra alt det som jeg nu har lært.
hej - din nye opdateret version synes at fungere ret godt - det eneste som kunne mangle kunne være en knap med Ryd alt og prøv igen - altså det samme som hvis man opdatere siden.
Men ellers synes jeg det ser fornuftig ud - så skal det hele bare lige styles og alle de mange spørgsmål skal skrives ind.
Man kan naturligvis også bare skrive at folk skal opdatere hvis de vil prøve igen - men ellers så er det vel forholdsvis nemt at finde en knap der kan #ryd alt og prøv igen".
>hvorfor går der ged i den når jeg ændre; >document.enea.a1; - til document.enea.a001; >document.enea.b1; - til document.enea.a002;
pga du har glemt at rette HTML delen <INPUT type="radio" value="1" name="a1"> <span class="svar">SVAR 2</span> <INPUT type="radio" value="2" name="a1"> <span class="svar">SVAR 3</span> <INPUT type="radio" value="3" name="a1"> <span class="svar">SVAR 4</span> <INPUT type="radio" value="4" name="a1">
her skal a1 jo også hedde a001
nb: jeg har lige lavet en lille omskrivning af nulstil_radio functionen, så loopet er lagt ud i en seperat function, hvorved functionen er nemmere at vedligeholde (demo er opdateret)
var nulstil_radio_loop = function (name) { var name_box = document.enea[name]; for (i = 0, lng = name_box.length; i < lng; i++) { if (name_box[i].checked) { name_box[i].checked = false; } }
}
var nulstil_radio = function () { nulstil_radio_loop("a1"); nulstil_radio_loop("b1"); nulstil_radio_loop("aa1");
/* // her bør man måske også fjerne markeringen fra radio boxene var a1_box = document.enea.a1; for (i = 0, lng = a1_box.length; i < lng; i++) { if (a1_box[i].checked) { a1_box[i].checked = false; } } var b1_box = document.enea.b1; for (i = 0, lng = b1_box.length; i < lng; i++) { if (b1_box[i].checked) { b1_box[i].checked = false; } } var aa1_box = document.enea.aa1; for (i = 0, lng = aa1_box.length; i < lng; i++) { if (aa1_box[i].checked) { aa1_box[i].checked = false; } } */
Det går fremad - og det begynder at se pænt og fornuftigt ud.
MEN...selve resultat er en tynd kop the! Kan det ikke gøres lidt mere spændende. Efter al det arbejde med at afkrydse disse mange spørgsmål så burde der være mere paw waw over selve resultatet.
if(document.enea.type_1_1[0].checked) { t1++;t1++; } else if (document.enea.type_1_1[1].checked) { t1++; } else if (document.enea.type_1_1[2].checked) { t1; } else { // fejl.... alert('Du mangler at svare på spørgsmål nr. 1') return false; }
Ny kode
// 1 switch (enea.a001.value) { case "1": t1++;t1++; break; case "2": t1++; break; case "3": t1+; break; default: ErrorMsg.push('Du mangler at svare på spørgsmål nr. 1'); ErrorCount++; break; }
>Hvad er forskel på: >t1++;t1++; tæller variablen t1 1 op 2 gange det er pænere at skrive t1+=2; eller t1 = t1 + 2; går det galt i js når den også har + concatenering, jeg mener ikke det går galt, men bare behendler det som tal
// 1 switch (enea.a001.value) { case "1": t1+=2; break; case "2": t1+=1; break; case "3": t1+=0; break; default: ErrorMsg.push('Du mangler at svare på spørgsmål nr. 1'); ErrorCount++; break; }
if(document.enea.type_1_1[0].checked) { t1++;t1++; } else if (document.enea.type_1_1[1].checked) { t1++; } else if (document.enea.type_1_1[2].checked) { t1; } else { // fejl.... alert('Du mangler at svare på spørgsmål nr. 1') return false; }
her løber du gennem arrayet enea.type_1_1 et array af radio's og ser efter hvilke radio der er checked. du stopper selvføgelig så snart du har fundet den der er checked, da der kun kna være 1 der er checked
Ny kode
// 1 switch (enea.a001.value) { case "1": t1++;t1++; break; // prøv at skrive t1+=2; istedet for t1++;t1++; case "2": t1++; break; case "3": break; // t1+ giver ikke nogle mening, intentionen er man ikke gør noget ved variablen. t1 default: ErrorMsg.push('Du mangler at svare på spørgsmål nr. 1'); ErrorCount++; break; }
her kigger du på den værdi der retuneres fra radio'en, og får du en værdi, er radio aktiv, ellers får du ingen værdi, og skriver en fejl da det er radio kan der kun retuneres 1 værdi, og derfor er dette klart nemmere
selvføgelig skal html'en passe <INPUT type="radio" value="1" name="a001"> <INPUT type="radio" value="2" name="a001"> <INPUT type="radio" value="3" name="a001">
værdierne i input felterne er dem du tester på i din case i switchen.
selvføgelig skal html'en passe <INPUT type="radio" value="1" name="a001"> <INPUT type="radio" value="2" name="a001"> <INPUT type="radio" value="3" name="a001">
Mener du at den værdi jeg skriver her skal ændres?
Fx spørgsmål nr 1: 3 svarmuligheder: Kryds ved svar nr 1 = 2 point til type nr 6 (Bare for at tage et eksempel) Kryds ved svar nr. 2 = 1 point til type nr 6 Kryds ved svar nr 3 = 1 point til type nr 2.
Men de værdier fastsætter jeg vel her:
switch (enea.a001.value) { case "1": t6+=2; break; case "2": t6+=1; break; case "3": t2+=1; break; default: ErrorMsg.push('Du mangler at svare på spørgsmål nr. 1'); ErrorCount++; break; }
Så jeg skal skrive værdien 2 steder? Det gør det svært at styre.
Skal det være således at hvis fx value for spm 1 er således: switch (enea.a001.value) { case "1": t6+=2; break; case "2": t6+=1; break; case "3": t2+=1; break;
Så skal jeg skrive de samme værdier heri: <INPUT type="radio" value="2" name="a001"> <INPUT type="radio" value="1" name="a001"> <INPUT type="radio" value="1" name="a001">
case "1": t6+=2; break; case "2": t6+=1; break; case "3": t2+=1; break;
Så skal jeg skrive de samme værdier heri: <INPUT type="radio" value="1" name="a001"> <INPUT type="radio" value="2" name="a001"> <INPUT type="radio" value="3" name="a001"> ja
evt i en anden rækkefølge, hvis det passer bedre feks <INPUT type="radio" value="2" name="a001"> <INPUT type="radio" value="1" name="a001"> <INPUT type="radio" value="3" name="a001">
du bør ikke have 2 værdier der er ens, da du så ikke ved hvilke knap der er trykket på
Fx ved Spørgsmål nr. 1 Svar 1 = denne afkrydsning skal give 2 point til type 1 Svar 2 = denne afkrydsning skal give 1 point til type 1 Svar 3 = denne afkrydsning skal give 1 point til type 7
Så derfor skriver jeg følgende:
// 1 switch (enea.a001.value) { case "1": t1+=2; break; case "2": t1+=1; break; case "3": t7+=1; break;
<span class="svar">Ja, altid</span> <INPUT type="radio" value="2" name="a001"> <span class="svar">Ja, de fleste gange</span> <INPUT type="radio" value="1" name="a001"> <span class="svar">Nej, det bekymre mig ikke</span> <INPUT type="radio" value="1" name="a001">
// 1 switch (enea.a001.value) { case "1": t1+=2; break; case "2": t1+=1; break; case "3": t7+=1; break;
<span class="svar">Ja, altid</span> <INPUT type="radio" value="2" name="a001"> <span class="svar">Ja, de fleste gange</span> <INPUT type="radio" value="1" name="a001"> <span class="svar">Nej, det bekymre mig ikke</span><INPUT type="radio" value="1" name="a001">
Vil dette ikke give det ønskede resultat? ------------------------------ nej
hvordan vil du kunne se om der er "Ja, de fleste gange" eller "Nej, det bekymre mig ikke" der er trykket ?? de vil jo bække 2 retunerer værdien 1
den skal se sådan ud <span class="svar">Ja, altid</span> <INPUT type="radio" value="1" name="a001"> <span class="svar">Ja, de fleste gange</span> <INPUT type="radio" value="2" name="a001"> <span class="svar">Nej, det bekymre mig ikke</span><INPUT type="radio" value="3" name="a001">
i din gamle vertion skulle du tilgå name="a001" som et array
<span class="svar">Ja, altid</span> <INPUT type="radio" name="a001"> <span class="svar">Ja, de fleste gange</span> <INPUT type="radio" name="a001"> <span class="svar">Nej, det bekymre mig ikke</span><INPUT type="radio" name="a001">
if(document.enea.a001[0].checked) { t1+=2; } else if (document.enea.a001[1].checked) { t1+=1; } else if (document.enea.a001[2].checked) { t7+=1; } else { // fejl.... alert('Du mangler at svare på spørgsmål nr. 1') return false; }
Fik det til at virke. Testede fx ved at give alle svar muligheden 1 og endte op med at alle typer fik en score på 30. Så det virker fint nu.
Men jeg kan ikke få det integreret på hjemmesiden. Her går der kuk i den. Sikkert fordi jeg bliver nødt til at splittet løsningen op i to dele. Den første del er det øverste som skal stå for sig selv - og den næste del er selve body delen.
Modtager meget gerne råd til hvordan det kan fixes.
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.