Olen tekemässä formia ja formissa on raksiruutuun vaihtoehtoja, tekasin siihen myös javascripti homman jolla voi valita kaikki tai poistaa kaikki valinnat
formissa valinnat on:
<input type="checkbox" name="activities[]" value="Lenkkeily"><input type="checkbox" name="activities[]" value="Pyoraily"><input type="checkbox" name="activities[]" value="Uinti">
ja javascripti on
function selectAllGroup(NewValue) { for (var i=0;i<document.testi.activities.length;i++) { var e = document.testi.activities[i]; e.checked = NewValue; } }
JS pelittää jos inputin nimen perästä otan pois [ ] - sulkeet, mutta sitten kun postaan homman niin se ei kerää valittuja tietoja , vaan pelkäskään viimeisen valinnan.
Ehotuksia ?
Tarkista homma vielä varmuuden vuoksi debuggaamalla "lomakkeen tarkistus" sivulla esim. echo implode(",",$_POST["activities"]);
Eli tuo $_POST["activities"] on taulukkomuodossa, kun olet sen edellisessä formissa taulukoksi määrittänyt.
Juu, olen tarkistanu tuon aikasemmin.
eli
foreach($_POST['activities'] as $harrastus) echo $harrastus;
tämä toimii kun olen laittanu activities taulukko muodossa mutta js ei, ja kun määritän activities ei taulukko muodossa niin silloin pelittää js.
onko tähän ratkaisuja kellään ??
Anna vaikka formille id:
<form ... id="lomake">
Sitten käyt läpi kaikki lomakkeen kentät:
lomake = document.getElementById("lomake"); for (i = 0; i < lomake.elements.length; i++) { lomake.elements[i].checked = arvo; }
Ja tietty kannattaa pistää vielä tarkistus, onko elementti edes checkbox.
Tai sitten annat kaikille checkboxeille saman class-määreen, käyttöön mainio Prototype-framework ja homma käy helposti:
document.getElementsByClassName('omaClass', 'lomakkeenId').each(function (item) { item.checked = true; });
Muistaiskohan joku sellaisen sivuston osoitetta, jolla ehdotetaan, että tuota Prototypeä ei kannattaisi käyttää? Jos arvata pitäisi niin syyksi oli muistaakseni annettu jotakin epästandardisuuteen ja olioihin liittyvää - varmaksi en sano kun muisti reistailee pahasti asian tiimoilta. Joku "10 Best JavaScript Practices" se oli, niitä vaan kun mahtuu 13 tusinaan.
Itsekin olen nähnyt aika monta vastalausetta Prototypeä ja muita vastaavia kirjastoja vastaan, mutta myös vastaavasti yhtä monta ja vielä enemmän puolesta. Omaa työskentelyäni Prototype on nopeuttanut todella paljon ja koodirivienkin määrä on tippunut valtavasti. Prototype itsessään on varsin kookas (tuorein versio taitaa olla yli 60 kilotavua), mutta pakkaamalla sen saa alle kymmeneen.
Suurilla tietomäärillä Prototypen $$-operaattori on tiedettävästi erittäin hidas, mutta siihenkin on tehty kolmannen osapuolen parannuksia, ja myös muita lisäkirjastoja löytyy Prototypen parantamiseen ja sen puutteiden paikkaamiseen (tänään luin muistaaksen sellaisesta kuin LowPro, täytyy myöhemmin tutustua tarkemmin). Itse teen parhaillaan varsin kookasta softaa, jonka käyttöliittymä lukuisine ominaisuuksineen on kokonaan tehty JavaScriptin avulla ja XmlHttp-kutsuja käytetään sisällön päivittämiseen. Toki taustalla hyrrää PHP, mutta JavaScript-rivien lukumäärä lähenee varmaankin jo kymmentä tuhatta, ellei ole jo ylikin. Ilman Prototypeä (ja Scriptaculous:ta) olisin varmasti tullut jo hulluksi. Ja tosiaan noiden kahden kirjaston käyttöönoton jälkeen koodirivien määrä tippui lähes puoleen. Elementtien luontiin Scriptaculouksen Builder on lyömätön (innerHTML:äähän ei tueta! :)). Tai no ei lyömätön, löytyyhän noita vielä vinkeämpiä muistakin kirjastoista, mutta kuitenkin.
Mutta mielelläni kuulen kyllä painavaa sanaa myös Prototypeä vastaan. Jos siitä löytyy jokin todella käyttökelvoton osatekijä, voi sen tietysti toteuttaa "manuaalisesti" :) Mutta näillä sanoilla kehoitan muitakin JS-koodareita tutustumaan vastaaviin kirjastoihin, onhan noita nykyään jo varsin monta erilaista. Pikaisesti mieleen tulee ainakin jo mainitut Prototype ja Scriptaculous, sekä JSQuery, Mochikit, Moo.fx ja Dojo.
Ja korjataan nyt viestiä sen verran että $$ on tietenkin funktio, ja tuo yksi kirjasto on jQuery eikä suinkaan JSQuery :)
Ajattelin nyt vielä lisätä tämän tänne kun iski silmään php.nettiä selatessa:
lainaus:
Note that if you are using JavaScript the [] on the element name might cause you problems when you try to refer to the element by name. Use it's numerical form element ID instead, or enclose the variable name in single quotes and use that as the index to the elements array, for example:
variable = documents.forms[0].elements['var[]'];
Jautsi jau
Kiitos paljo vastauksista...mukavasti tuli tietoa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.