Avatar billede connorz Nybegynder
06. januar 2003 - 19:26 Der er 18 kommentarer og
1 løsning

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.
Avatar billede olebole Juniormester
06. januar 2003 - 21:30 #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>
Avatar billede broegaard Nybegynder
06. januar 2003 - 23:00 #2
Ikke at jeg har en bedre løsning men den løsning virker ikke i mozilla.
Avatar billede olebole Juniormester
06. januar 2003 - 23:18 #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
Avatar billede connorz Nybegynder
07. januar 2003 - 14:38 #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.?
Avatar billede olebole Juniormester
07. januar 2003 - 19:21 #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
Avatar billede connorz Nybegynder
08. januar 2003 - 17:12 #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...
Avatar billede olebole Juniormester
08. januar 2003 - 17:24 #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
Avatar billede connorz Nybegynder
08. januar 2003 - 17:26 #8
ja for hvad står der så egentlig i $bla?!?
men som du siger må det virke med $_GET...

Tak for tippet...
Avatar billede olebole Juniormester
08. januar 2003 - 17:43 #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
Avatar billede rzj Nybegynder
08. januar 2003 - 17:48 #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
Avatar billede olebole Juniormester
08. januar 2003 - 17:52 #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
Avatar billede olebole Juniormester
08. januar 2003 - 17:55 #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
Avatar billede rzj Nybegynder
09. januar 2003 - 10:38 #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 ?
Avatar billede olebole Juniormester
09. januar 2003 - 17:44 #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
Avatar billede cozey Nybegynder
09. januar 2003 - 17:45 #15
Hurtigt sp.

-Hvis du ved  at s´varet ligger i et javascript, hvor pokker har du så lagt det i PHP-kategorien?  :o)
Avatar billede olebole Juniormester
09. januar 2003 - 17:48 #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.
Avatar billede olebole Juniormester
09. januar 2003 - 17:49 #17
cozey >> Hvorfor vrøvler du nu om JS?
Avatar billede rzj Nybegynder
09. januar 2003 - 18:45 #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.
Avatar billede olebole Juniormester
09. januar 2003 - 19:08 #19
;o)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester