Auttakaa nyt hyvänen aika tyhmää! Mä oon ihan jumissa tän kanssa, vaikka ei ole oikeasti vaikea ongelma. En vaan nyt millään keksi oikeaa funktiota...
Eli testissä on 8 kysymystä, kaikissa 5 vastausvaihtoehtoa(radiobuttonit) ja kaikenkaikkiaan 5 eri tulosvaihtoehtoa. Vastausvaihtoehdot on mulla koodissa nimetty a,b,c,d ja e, ja vastaukset voi olla vaikka vastaava kirjain.
ELI: Pitäis saada funktio, joka antaa vastaukseksi a:n, kun testissä on valittu vähintään 5 a:ta vastaavaa vaihtoehtoa jne.
Tällä hetkellä koodini antaa lopuksi alertin, jossa näkyy miten olet vastannut, eli käytännössä: vastauksesi olivat acdebad. Ja tämä pitäisi siis saada muotoon: testi tulos on...
EN VAAN OSAA!!! Laittakaa joku viisas mulle se vastausten lajittelu koodin pätkä, olisin ikuisesti kiitollinen....
var vastaukset = "deadbeef"; var maarat = {}; var eniten = null; // Kierretään kaikki vastaukset. for (var i = 0; i < vastaukset.length; ++i) { var vastaus = vastaukset.substr(i, 1); // Jos vastausta ei ole vielä esiintynyt, asetetaan määräksi nolla. if (!maarat[vastaus]) { maarat[vastaus] = 0; } // Lisätään määrää yhdellä. maarat[vastaus] += 1; // Jos eniten-muuttuja on tyhjä tai kyseistä kirjainta on // vähemmän kuin tätä, vaihdetaan siihen tämä kirjain. if (!eniten || maarat[eniten] < maarat[vastaus]) { eniten = vastaus; } } alert("Eniten oli vastausta " + eniten + " (" + maarat[eniten] + ")");
Kiitti, en kyllä saa tätäkään toimimaan... ;(
Hmm saatko tämän toimimaan?
function muodosta_jono() { var radiot = document.getElementsByTagName("input"); var pituus = radiot.length-1; var jono = ""; for (i = 0; i < pituus; ++i) { if (radiot[i].checked == true) { jono += radiot[i].value; } } return jono; } function laske_yleisin(jono) { var maarat = {}; var eniten = null; // Kierretään kaikki vastaukset. for (var i = 0; i < jono.length; ++i) { var vastaus = jono.substr(i, 1); // Jos vastausta ei ole vielä esiintynyt, asetetaan määräksi nolla. if (!maarat[vastaus]) { maarat[vastaus] = 0; } // Lisätään määrää yhdellä. maarat[vastaus] += 1; // Jos eniten-muuttuja on tyhjä tai kyseistä kirjainta on // vähemmän kuin tätä, vaihdetaan siihen tämä kirjain. if (!eniten || maarat[eniten] < maarat[vastaus]) { eniten = vastaus; } } alert("Eniten oli vastausta " + eniten + " (" + maarat[eniten] + ")"); } function ilmoita() { jono = muodosta_jono(); laske_yleisin(jono); }
Lopuksi lomakkeen alle vielä tällainen koodi
<p><input type="submit" onClick="ilmoita()" /></p>
Tämähän toimii, kiitos tuhannesti!!!!!
Joo mulla olis taas ongelma. Nyt on siis tuon alemman vaihtoehdon kaltainen koodi, mutta pitäisi vielä saada vastaukseen näkymiin pitkä pätkä tekstiä.
Eli pitääkö se tehdä jotenkin if + alert systeemillä 5 kertaa, eli joka vastaukseen omansa?
Pitäisi siis saada vaihtoehdosta a tulemaan tietty teksti vastaukseksi, vaihtoehdosta b myös jne. Eli silti pitää laskea mihin on vastattu eniten ja sen mukaan sitten antaa vastaus.
Joku esimerkki olis taas aika kova sana.... =)
Joo siis edelleen pitää laskea mitä vastausta on annettu eniten ja sen mukaan sitten tulee lopullinen vastaus, joka näkyy myös käyttäjälle. Tähän vastaukseen tulee tekstiä useampi sana.
(Mod. poisti alta joukon tämän viestin kopioita.)
Kappas. Poistin viestini, koska kirjoitin ohjetta liittyen ei mihinkään.
Ps. Mikäs ongelma täällä oli, kun ei voinut muokata viestiään tai lähettää? miukuvan viesti tuli kuudesti.
Jaa'a, en tiiä mikä ongelma oli, sivu ei latautunut kun yritin lähettää vastauksen.
Mutta tosiaan jos jollain on vastausta, niin mielellään saa laittaa tännepäin...
miuku80 kirjoitti:
Pitäisi siis saada vaihtoehdosta a tulemaan tietty teksti vastaukseksi, vaihtoehdosta b myös jne.
Tarkoitatko siis tällaista?
if (eniten == "a") { alert("Eniten oli vastausta a. Taidat siis pitää apinoista."); } if (eniten == "b") { alert("Eniten oli vastausta b. Banaanit ovat selvästi mieleesi."); } if (eniten == "c") { alert("Eniten oli vastausta c. Kuuntelet usein cembalomusiikkia."); }
Macro kirjoitti:
Ps. Mikäs ongelma täällä oli, kun ei voinut muokata viestiään tai lähettää? miukuvan viesti tuli kuudesti.
Tietokanta oli parikymmentä minuuttia jumissa, ja eräät innokkaat keskustelijat hakkasivat lähetä-nappia aina parin minuutin välein, jolloin viestejä tuli aika monta, kun kanta vihdoin käsitteli kyselyt.
Tuohon tyyliin!
T. Innokas keskustelija...
miukuva80 kirjoitti:
Tuohon tyyliin!
Mikäli vastauksia on paljon, kannattaa tulokset tallentaa taulukkoon.
Metabolixin koodi hieman muokattuna:
tulokset = {"a":"Eniten oli vastausta a. Taidat siis pitää apinoista.", "b":"Eniten oli vastausta b. Banaanit ovat selvästi mieleesi.", "c":"Eniten oli vastausta c. Kuuntelet usein cembalomusiikkia."}; alert (tulokset [eniten]);
Yllä vastaukset on säilötty objektiin, ei taulukkoon.
Yritin tuolla if -alert systeemillä, mutta ei toimi, näyttää alerttina kaikkien kysymysten vastaukset erikseen, eli ok:ta saa hakata useamman kerran ja vastaus vaihtuu sen mukaan mitä on kyseiseen yhteen kysymykseen vastannut.
Mikä tässä mättää?:
function muodosta_jono() { var radiot = document.getElementsByTagName("input"); var pituus = radiot.length-1; var jono = ""; for (i = 0; i < pituus; ++i) { if (radiot[i].checked == true) { jono += radiot[i].value; } } return jono; } function laske_yleisin(jono) { var maarat = {}; var eniten = null; // Kierretään kaikki vastaukset. for (var i = 0; i < jono.length; ++i) { var vastaus = jono.substr(i, 1); // Jos vastausta ei ole vielä esiintynyt, asetetaan määräksi nolla. if (!maarat[vastaus]) { maarat[vastaus] = 0; } // Lisätään määrää yhdellä. maarat[vastaus] += 1; // Jos eniten-muuttuja on tyhjä tai kyseistä kirjainta on // vähemmän kuin tätä, vaihdetaan siihen tämä kirjain. if (!eniten || maarat[eniten] < maarat[vastaus]) { eniten = vastaus; } if (eniten == "a") { alert ("Olet yksinpuurtaja."); } if (eniten == "b") { alert ("Olet kasvuhakuinen"); } if (eniten == "c") { alert ("Olet kansainvälinen"); } if (eniten == "d") { alert ("Olet muutoshalukas"); } if (eniten == "e") { alert ("Olet hidastunut"); } } } function ilmoita() { jono = muodosta_jono(); laske_yleisin(jono); }
Mod. lisäsi kooditagit.
Viestilaatikon alla on linkki "Ohjeita viestien kirjoitukseen", tutustu siihen. Muuttuja eniten
on aina null
tullessasi ehtoblokkiin, jonka kommentti sanoo "Jos eniten-muuttuja on tyhjä..."
Tein tuossa jonkin sortin systeemin... Se ei kyllä tarkista, onko kaikki tiedot syötetty, tai mitä tapahtuu jos on yhtä monta tiettyä.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> <script type="application/javascript"> function laske() { var napit = document.getElementsByTagName("input"); var jono = {"A" : 0, "B" : 0, "C" : 0, "D" : 0}; var selitykset = {"A" : "Olet A.", "B" : "Olet B.", "C" : "Olet C.", "D" : "Olet D."}; var eniten = "A"; for(var i = 0; i < napit.length; i++) { if(napit[i].checked == true) { jono[napit[i].value] += 1; } } for(key in jono) { if(jono[key] > jono[eniten]) eniten = key; } alert(selitykset[eniten] + " Vastasit " + jono[eniten] + " kertaa " + eniten + "."); } </script> </head> <body> <form> <ul style="list-style: none"> <li><input type="radio" value="A" name="1" /> A</li> <li><input type="radio" value="B" name="1" /> B</li> <li><input type="radio" value="C" name="1" /> C</li> <li><input type="radio" value="D" name="1" /> D</li> </ul> <ul style="list-style: none"> <li><input type="radio" value="A" name="2" /> A</li> <li><input type="radio" value="B" name="2" /> B</li> <li><input type="radio" value="C" name="2" /> C</li> <li><input type="radio" value="D" name="2" /> D</li> </ul> <ul style="list-style: none"> <li><input type="radio" value="A" name="3" /> A</li> <li><input type="radio" value="B" name="3" /> B</li> <li><input type="radio" value="C" name="3" /> C</li> <li><input type="radio" value="D" name="3" /> D</li> </ul> <ul style="list-style: none"> <li><input type="radio" value="A" name="4" /> A</li> <li><input type="radio" value="B" name="4" /> B</li> <li><input type="radio" value="C" name="4" /> C</li> <li><input type="radio" value="D" name="4" /> D</li> </ul> <input type="submit" onClick="laske()" /> </form> </body> </html>
Elikkäs kun mullahan tuossa sivu vaihtuu aina kun kysymys vaihtuu, niin en kyllä saa tätä viimeisintä vinkkiä nyt toimimaan eli ei tee mitään "seuraava"-napista. Mitähän eroa noilla on, kun mun koodissa on kysymys seuraavalla tavalla:
<body><form id="multiForm" method="POST" action="javascript:void(0)" onSubmit="showValues(this)"> <div id="sivu1" class="sivu" style="visibility:visible;"><br><br><br><br> <fieldset> <legend>1/8 merimatkan jälkeen koet suurta tarvetta…</legend> <br><br> <p><input type="radio" name="K1" id="T1" value="a" checked="checked">Ottaa kunnon rommipaukku </p>
Ja tuossa edellä on <li><input type="radio" value="D" name="4" /> D</li>?
Ei taas ymmärrä ei...
En ihan ymmärtänyt mitä tarkoitat, mutta ei noilla ole mielestäni mitään eroa toimivuuden kannalta koodini kanssa. Mikä ei toimi? Laitatko koodia?
Varsinainen vika tuolla ylempänä on, että alert-jutut ovat for-silmukan sisällä. Kannattaisi varmaankin tutustua ohjelmoinnin perusasioihin edes sen verran, että osaisi tuon huomata ja korjata itse.
Epähuomiossa meni alertit väärään kohtaan, anteeksi vaan kun jouduitte näkemään sen...
Aihe on jo aika vanha, joten et voi enää vastata siihen.