Miten toteutan seuraavan:
Sivulla napit 0-10, nimikenttä ja kenttä, joka näyttää kuinka monta kertaa nappeja on painettu. Kun painalluksia on kymmenen, lähetetään tiedot automaattisesti skriptille, joka syöttää tiedot tietokantaan.
Javascrptilläkö tuollainen olisi paras tehdä. Löytyykö jostain esimerkkiä, jota voisi soveltaa. Javascrpt -kokemusta ei ole yhtään, mutta ohjelmointikokemusta jonkin verran.
JavaScriptillä lasket ne kentät ja sitten kun kaikki kymmenen on valittu, niin sen jälkeen lähetät esim. viestin PHP-skriptille, joka hoitaa tietokantapuolen... Tod. näk. helpointa on käyttää checkboxeja buttonien sijasta...
jQuerylla ja checkboxeja käyttämällä systeemi voitaisiin tehdä näin:
$( document ).ready( function () { var checked = 0; $( '.checkbox' ).click( function () { if ( ( $( this ).is( ':checked' ) ) ) { $( '#result' ).val( ++checked ); if ( checked == 10 ) alert( "Kaikki ruudut valittu!" ); } else { $( '#result' ).val( --checked ); } } ); } );
<!--checkboxeja voi sitten olla n-määrä--> <input type="checkbox" class="checkbox" /> <input type="checkbox" class="checkbox" /> <input type="checkbox" class="checkbox" /> <input type="text" id="result" value="0" />
Checkboksi ei käy, koska samaa nappia saatetaan painaa monta kertaa. Koodin siis täytyisi lähettää se, montako kertaa kutakin nappia on painettu, ja lisäksi vielä missä järjestyksessä.
<form action="skripti.php"> <button type="button" value="1">1</button> <button type="button" value="2">2</button> <input type="text" name="painetut" value="" /> <!-- Vaihda ylle type="hidden", jos haluat listan piiloon. --> </form>
$("button").click(function() { var p = this.form.painetut; p.value = (p.value ? p.value + ", " : "") + this.value; if (p.value.split(", ").length == 10) { this.form.submit(); } });
Nyt sain jotain aikaan. Koodini toimi, kun kokeilin sitä aluksi niin, että se vain heittää ilmoituksen joka kerta, nappia painetaan. Ilmoitus kertoi kuinka mones painallus oli. Nyt yritin lisätä funktioon if-lauseen mutta nyt se ei enää toimi. Missä vika?
var painallusmaara = 0; function klikkaus(nappinumero) { painallusmaara ++; if (painallusmaara == 1){ lomake.yksi.value == nappinumero; } if (painallusmaara == 2){ lomake.kaksi.value == nappinumero; } // if-lauseet kymppiin asti }
</head> <body> <form name="lomake"> <input type="button" value=" 0 " onclick="klikkaus(0)"> <input type="button" value=" 1 " onclick="klikkaus(1)"> <input type="button" value=" 2 " onclick="klikkaus(2)"> //napit kymppiin asti <input type="text" name="yksi" value="" /> <input type="text" name="kaksi" value="" /> //textboksit kymppiin asti </form>
Vertaat klikkauskertoja napin numeroon. Vaihda if-lauseisiin painallusmaara -> nappinumero sekä if-lauseen sisälle nappinumero -> painallusmaara.
Kyllä sen täytyy noin päin olla. Koodin tarkoitus siis olisi syöttää ykkösboksiin ensimmäisenä painetun napin numero. Kakkosboksiin taas toisena painetun napin numero jne.
Sun koodin tarkotus muuttukin sitten tässä keskustelun aikana. Ensin lomake piti lähtettää kun nappia oli painettu 10 kertaa, nyt halutaankin vaan sijoitella niitä painalluksia johonkin tekstibokseihin.
Huomasimpahan vaan, että sulla on if-lauseen sisällä ==-vertaus =-merkin sijaan.
Kyllä sen edelleen kuuluu lähettää lomake kymmenennen painalluksen jälkeen. Taisin selittää asian vähän huonosti.
No lisää sitten vaikka tuohon koodiisi vielä yksi if-lohko ja kirjoita siihen
if(painallusmaara == 10) document.form.submit();
Kiitoksia. Nyt toimii.
Aihe on jo aika vanha, joten et voi enää vastata siihen.