connorz
(15.549 point. Point ude: 60)
Markeringen af alle/ingen checkboxe...
Jeg har en form med mange checkboxe. De er navngivet med NAME='box[]' så alle markerede elementer bliver sendt videre i ét array.
Nu vil jeg gerne have en knap på min form som markerer alle checkboxene på én gang. (desuden vil jeg gerne have en, der fjerner alle markeringer, men det må vel være ca. samme løsning). Jeg ved godt at løsningen i sidste ende må ligge i JavaScript, men jeg har det problem, at jeg har navngivet checkboxene som jeg har.
Skrevet man. d. 06. januar 2003 kl. 21:30:37| #1
<ole>
box[] er ikke et tilladeligt navn i forhold til HTML-standarden. Et navn eller en id må ikke indeholde brackets.
Jeg ved godt php.net pusher denne elendige løsning, men det har ikke noget med HTML at gøre. Desuden er der ingen somhelst grund til, at checkbokse skal ligge i et array. De er ligeså lette at bearbejde på serveren, hvis ikke de ligger i et array :)
Hvad det andet angår, kan du gøre sådan:
<script type="text/JavaScript">
function check( f, on_off ) {
for ( i=0; i<f.length; i++ ) {
var e = f.elements[i];
if ( e.type=="checkbox" && e.name.indexOf("box")!=-1 ) e.checked = on_off
}
}
</script>
<form>
<input type="checkbox" name="box1"><br>
<input type="checkbox" name="box2"><br>
<input type="checkbox" name="box3"><br>
<input type="checkbox" name="box4"><br><br>
<button onclick="check(this.form, 1)">TEST on</button><br>
<button onclick="check(this.form, 0)">TEST off</button>
</form>
/mvh
</bole>
Skrevet man. d. 06. januar 2003 kl. 23:00:37| #2
Ikke at jeg har en bedre løsning men den løsning virker ikke i mozilla.
Skrevet man. d. 06. januar 2003 kl. 23:18:38| #3
Sorry ... jeg glemte, at Mozilla/NS fejlfortolker button-elementet og submitter formen, når der klikkes :(
Script'et fungerer fint, men formen submittes p.gr.a. knappen. Løsningen er at returnere false:
onclick="check(this.form, 1);return false"
/mvh
Skrevet tir. d. 07. januar 2003 kl. 14:38:24| #4
jo men så er problemet, at de checkede checkboxe ikke submittes til PHP som et array - og det var det, der ville være meget smart for mig. Har I en løsning, der kan kompensere for dette? Kan man i en enkel for-løkke i PHP undersøge variabler med navnene box1, box2, box3 osv.?
Skrevet tir. d. 07. januar 2003 kl. 19:21:54| #5
Hehe ... nu er det jo ikke, hvad den enkelte finder smart, der sætter reglerne ;o)
Denne her løsning gør det overflødigt at overtræde HTML-standarden:
foreach ($_POST as $key => $value) {
if ( strpos($key, "box")!==false ) print $key." : ".$value."<br>\n";
}
Her printer jeg dem blot ud, men du kan jo gøre ved dem, hvad du vil.
/mvh
Skrevet ons. d. 08. januar 2003 kl. 17:12:15| #6
olebole>>>lav et svar - jeg skal lige være sikker på jeg kan få det til at virke, men ideen er vist god nok...
Skrevet ons. d. 08. januar 2003 kl. 17:24:20| #7
Jeg har selv brugt den masser af gange, så jeg er sikker på, den er god nok - men test den selv, det er altid klogt ;o)
Til gengæld kan du ikke bruge denne metode til multiple selects, hvor man støder ind i samme problem. Det HTML-element er nok det dårligst konstruerede ... tenderende det ubrugelige, hvis HTML-standarden skal overholdes.
Her kan værdierne kun ekstraheres, hvis metoden er 'GET' - og så skal du naturligvis 'lede' i $_GET.
Prøver du at sende en form, hvori du har en multiple select (name="bla") med method="get", vil du i adresse-linien på det modtagende dokument se:
?bla=valgt_værdi_1&bla=valgt_værdi_2&bla=valgt_værdi_3
hvilket ikke er overbevisende begavet - og umuligt at arbejde med :(
/mvh
Skrevet ons. d. 08. januar 2003 kl. 17:26:14| #8
ja for hvad står der så egentlig i $bla?!?
men som du siger må det virke med $_GET...
Tak for tippet...
Skrevet ons. d. 08. januar 2003 kl. 17:43:32| #9
"Her kan værdierne kun ekstraheres, hvis metoden er 'GET' - og så skal du naturligvis 'lede' i $_GET."
Var en tanketorsk ...! Sorry ;o)
Ved en multiple select sendt med 'GET', kan du gøre dette:
$q = explode( "&", $_ENV[QUERY_STRING]);
for ( $i=0; $i<count($q); $i++) {
$tmp = explode( "=", $q[$i] );
if ( strpos( $tmp[0], "bla" )!==false ) print $tmp[1]."<br>\n";
}
/mvh
Skrevet ons. d. 08. januar 2003 kl. 17:48:10| #10
olebole>>Så er det da mærkeligt at
http://validator.w3.org ikke brokker sig over navngivningen <input type='text' name='box[]'> ved validering med HTML 4.01 Transitional. Det er jo dem der sætter standarden, ik?
/raz
Skrevet ons. d. 08. januar 2003 kl. 17:52:07| #11
Nej, ikke spor :)
Validatoren er ikke perfekt ... du skal kikke i W3C's rekommendationer - det er dem, validatoren efter bedste evne skal forsøge at validere din kode op mod.
Validatoren er et stykke software, som du ikke skal stole på ... den er kun ment som en hjælp ;o)
/mvh
Skrevet ons. d. 08. januar 2003 kl. 17:55:19| #12
Et 'name' eller en 'id' _skal_ starte med et bogstav.
Derefter må det indeholde bogstaver (a-z og A-Z), tal, underscore, punktum og bindestreg ... _intet_ andet ;o)
/mvh
Skrevet tor. d. 09. januar 2003 kl. 10:38:26| #13
olebole>>Ok, men jeg synes nu det er et smart 'hack'...
Du skriver at det er ligeså let at gøre det på anden måde, hvilken måde er er det, hvis jeg vil have resultater af input felter i et array med referencen $box ?
Skrevet tor. d. 09. januar 2003 kl. 17:44:05| #14
1. Du må lægge din (for PHP'ere så almindelige) array-fiksering af dig :)
2. Du kan jo gøre nøjagtig det samme med text-inputs, som jeg lige har vist - og så kan du fylde dem i arrays eller gøre med dem, hvad du vil.
Havde meningen med HTML-elementer været, at de på serveren skulle optræde i array-form, var HTML grundlæggende blevet helt anderledes opbygget :)
/mvh
Skrevet tor. d. 09. januar 2003 kl. 17:45:31| #15
Hurtigt sp.
-Hvis du ved at s´varet ligger i et javascript, hvor pokker har du så lagt det i PHP-kategorien? :o)
Skrevet tor. d. 09. januar 2003 kl. 17:48:01| #16
PS: Det er ikke et 'hack', men en fejl, der for tiden accepteres af browsere - men du ved ikke, om du skal lave det om i morgen.
Laver man løsninger, man tager penge for er det noget 'grisseri', at bygge sin kode på browser-bugs ... det er noget, man kan gøre, hvis det er en privat side om huskattens kønsliv el. lign. :)
Man kan i hvertfald aldrig komme i nærheden af at kalde sin løsning professionel.
Skrevet tor. d. 09. januar 2003 kl. 17:49:28| #17
cozey >> Hvorfor vrøvler du nu om JS?
Skrevet tor. d. 09. januar 2003 kl. 18:45:16| #18
olebole>> tak for svar og sarkasme.
ad.1. Jeg er ikke specielt array fikseret, faktisk går mit ? jo netop på at undgå at være det.
ad. 2. Jeg havde ikke opdaget at du havde lavet en losnung ovenfor.
Skrevet tor. d. 09. januar 2003 kl. 19:08:01| #19