Avatar billede andersbl Nybegynder
25. juli 2011 - 15:46 Der er 14 kommentarer og
1 løsning

Lav listbox med mulighed for at vælge mere end en item uden at bruge andet en mus!

Hej Eksperter
Jeg ved godt hvordan man laver en listbox og giver mulighed for at vælge mere end en item. Men jeg kunne godt tænke mig at undgå at bruge [ctrl] når man vil vælge mere end en.

Ved nederstående link, er et eksempel på en list box, hvordan ændre jeg denne så jeg kan vælge mellem forskellige items uden at bruge andet en musen????

Link:
http://homepage.ntlworld.com/kayseycarvey/jss3p10.html?s1=Fashion&s1=Opera&s1=Pop+Music&Submit=Get+Selected+Items
Avatar billede olebole Juniormester
25. juli 2011 - 16:05 #1
<ole>

Hvordan vil du have, det skal virke? Skal du også kunne vælge en option fra, eller ...? Og i så fald, hvordan?

/mvh
</bole>
Avatar billede andersbl Nybegynder
25. juli 2011 - 16:16 #2
Ja, du skal også kunne vælge fra. Lidt som om ctrl altid blev trukket ned
Avatar billede michael_stim Ekspert
25. juli 2011 - 16:29 #3
Samme funktion som check box ;o)
Avatar billede olebole Juniormester
25. juli 2011 - 16:38 #4
Jamen, så er det vel bare checkbokse, der skal bruges. Brugeren ved, hvordan de skal bruges - og ved også, hvordan en multiple select plejer at virke. Mon ikke det ville være hensigtsmæssigt at holde sig til det?  =)
Avatar billede andersbl Nybegynder
25. juli 2011 - 16:48 #5
Sådan har jeg gjort nu men der er pladsmangel og det ville løse mit problem.
Avatar billede olebole Juniormester
25. juli 2011 - 17:08 #6
IE understøtter ikke onmousedown på OPTION elementer, så det bliver let noget bøvl. Ikke noget, jeg gider at sidde og rode med for sjov. I stedet kan du lave noget à la:


<script type="text/javascript">
function setColor(elmCheck) {
    var elmLine = elmCheck.parentNode;
    if (elmCheck.checked) {
        elmLine.style.background = "#000080";
        elmLine.style.color = "#fff";
    } else {
        elmLine.style.background = "";
        elmLine.style.color = "";
    }
    elmCheck.blur();
}
</script>

<div style="width:120px">
    <div><input id="hest" name="blabla[]" type="checkbox" onclick="setColor(this)" style="width:0;height:0"><label for="hest">HypHest</label></div>
    <div><input id="ko" name="blabla[]" type="checkbox" onclick="setColor(this)" style="width:0;height:0"><label for="ko">MuhKo</label></div>
</div>

Avatar billede olebole Juniormester
25. juli 2011 - 17:14 #7
Glem det! Havde ikke tjekket i andet end IE - og andre browsere har problemer med at sætte højde/bredde på checkbox'e  :o|
Avatar billede olebole Juniormester
25. juli 2011 - 17:40 #8
Du kan også lave et lille hack som dette:


<style type="text/css">
.multiSelect {
    width: 120px;
    height: 160px;
    overflow: hidden;
    border: 1px solid #999;
}
.multiSelect input {
    margin-left: -14px;
    margin-right: 3px;
    padding: 0;
    border: 0;
}
</style>

<script type="text/javascript">
function setColor(elmCheck) {
    var elmLine = elmCheck.parentNode;
    if (elmCheck.checked) {
        elmLine.style.background = "#000080";
        elmLine.style.color = "#fff";
    } else {
        elmLine.style.background = "";
        elmLine.style.color = "";
    }
    elmCheck.blur();
}
</script>

<div class="multiSelect">
    <div><input id="hest" name="blabla[]" type="checkbox" onclick="setColor(this)"><label for="hest">HypHest</label></div>
    <div><input id="ko" name="blabla[]" type="checkbox" onclick="setColor(this)"><label for="ko">MuhKo</label></div>
    <div><input id="hund" name="blabla[]" type="checkbox" onclick="setColor(this)"><label for="hund">VovHund</label></div>
</div>

Avatar billede andersbl Nybegynder
26. juli 2011 - 10:15 #9
olebole din løsning er helt perfekt. Bøjer mig i støvet for din fantasi :)

Smider du er svar...
Avatar billede olebole Juniormester
27. juli 2011 - 03:17 #10
Ellers tak, jeg samler ikke points. Læg selv et svar og accepter, så tråden lukkes  =)

Løsningen ovenfor er knaldet sammen på et par minutter. En anden og måske bedre/kønnere udførelse ville måske være at anbringe alle checkbox'e i ét div - som så positioneres absolute og tildeles en left- og topværdi på f.eks. -20000px ... langt udenfor synsvidde.

Du kunne så nøjes med at have dine labels liggende i et div helt for sig selv:


<style type="text/css">
.multiSelect {
    width: 120px;
    height: 160px;
    overflow: hidden;
    border: 1px solid #999;
}
.multiSelect .boxStore {
    position: absolute;
    left: -20000px;
    right: -20000px;
}
.multiSelect label {
    display: block;
}
</style>

<script type="text/javascript">
function setColor(elmLine) {
    var elmCheck = document.getElementById(elmLine.getAttribute("for"));
    if (!elmCheck.checked) {
        elmLine.style.background = "#000080";
        elmLine.style.color = "#fff";
    } else {
        elmLine.style.background = "";
        elmLine.style.color = "";
    }
}
</script>

<div class="multiSelect">
    <label for="hest" onclick="setColor(this)">HypHest</label>
    <label for="ko" onclick="setColor(this)">MuhKo</label>
    <label for="hund" onclick="setColor(this)">VovHund</label>
   
    <div class="boxStore">
        <input id="hest" name="blabla[]" type="checkbox">
        <input id="ko" name="blabla[]" type="checkbox">
        <input id="hund" name="blabla[]" type="checkbox">
    </div>
</div>
Avatar billede olebole Juniormester
27. juli 2011 - 03:18 #11
På denne måde bliver hele linjen klikbar - ikke kun teksten  *o)
Avatar billede olebole Juniormester
27. juli 2011 - 03:26 #12
PS: Denne linje kan måske synes mærkelig:

[div]  if (!elmCheck.checked) {[div]
- men det skyldes, at onclick eventen på label elementet fyres af, før den fyres på checkbox'en. Checkbox'ens check-status har derfor endnu ikke ændret sig på dette tidspunkt - og derfor skal linjen highlight'es, hvis den tilhørende checkbox ikke er checked. Det bliver den en brøkdel af et sekund senere. Derfor udråbstegnet i betingelsen
Avatar billede olebole Juniormester
27. juli 2011 - 03:27 #13
- og med korrekt BB code:

    if (!elmCheck.checked) {
Avatar billede andersbl Nybegynder
27. juli 2011 - 08:48 #14
Mange tak for den fine forklaring og tilføjelser.

Ved du hvad flk bruger point til?
Avatar billede olebole Juniormester
27. juli 2011 - 15:03 #15
Selvtak. Jeg forstod dog ikke lige dit sidste spørgsmål  =)
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