Avatar billede ssv Nybegynder
03. oktober 2008 - 13:36 Der er 22 kommentarer og
1 løsning

Hente værdi til select

Hello.

Nu er jeg kommet i den knibe igen, at jeg skal bruge noget javascript - og nu hvor jeg ikke selv er den skarpeste til netop det, har jeg brug for jeres hjælp.

Demo-link: http://proads.dk/simon/get/

Jeg skal hente en værdi til selectboxen via et klik på "kroppen" (se link). Værdierne er Hoved, Mave og Ben. Ved at klikke på "hovedet" i Krop nr. 1 skal option'en "Hoved" hentes til selectboxen. Hvis jeg i Krop nr. 2 trykker på "ben" skal option'en "Ben" hentes til selectboxen osv.

I princippet skal klikket på en af de 3 kropsdele hente enten option 1, option 2 eller option 3 (Hoved, mave og ben). Selectboxene skal desuden fungere uafhængigt af hinanden.
Avatar billede roenving Novice
03. oktober 2008 - 13:42 #1
Hente ?-)

-- skal den vværdi markeres selected eller ...
Avatar billede ssv Nybegynder
03. oktober 2008 - 13:47 #2
Yes.. Beklager jeg ikke lige kan de rigtige "termer" ;-)
Avatar billede w13 Novice
03. oktober 2008 - 13:54 #3
Du markerer f.eks. option 1 med:

document.getElementById('selectens-id').selectedIndex=0;

og option 2 med:

document.getElementById('selectens-id').selectedIndex=1;

osv.
Avatar billede roenving Novice
03. oktober 2008 - 13:56 #4
Så f.eks.

<div class="group">
<a class="head" href="#" onclick="marker(this,'Hoved');"></a>
<a class="body" href="#" onclick="marker(this,'Mave');"></a>
<a class="legs" href="#" onclick="marker(this,'Ben');"></a>

<select>
  <option>Kropsdel</option>
  <option value="head">Hoved</option>
  <option value="body">Mave</option>
  <option value="legs">Ben</option>
</select>
</div>

<script type="text/javascript">
function marker(elm, part){
  var sel = elm.parentNode.getElementsByTagName("select")[0];
  for(i=0, im=sel.length; im>i; i++){
    if(sel.options[i].value.toLowerCase() == part.toLowerCase()){
      sel.options[i].selected = true;
      return;
    }
  }
}
</script>
Avatar billede ssv Nybegynder
03. oktober 2008 - 14:06 #5
Well, det lader ikke rigtig til at virke - jeg har opdateret demo-linket med roenvings løsning på Krop 1.

Er det bare mig der er en klovn eller virker det ikke ;-)?
Avatar billede roenving Novice
03. oktober 2008 - 14:11 #6
Ups, jeg manglede jo lige at aflyse linket:

<a class="head" href="#" onclick="marker(this,'Hoved');return false;"></a>
Avatar billede w13 Novice
03. oktober 2008 - 14:12 #7
Jeg tror snarere, det skyldes, at det skal være:

marker(this,'head');

marker(this,'body');

og:

marker(this,'legs');
Avatar billede roenving Novice
03. oktober 2008 - 14:17 #8
Hrm, godt overset (af mig !-)

-- enten det, eller også:

if(sel.options[i].text.toLowerCase() == part...
Avatar billede ssv Nybegynder
03. oktober 2008 - 14:25 #9
Med w13's svar fik jeg det til at fungere, så jeg ved ikke om i vil dele eller hvordan - det må i selv finde ud af :-)
Avatar billede ssv Nybegynder
03. oktober 2008 - 14:50 #10
Og lige en lille bonus:

Hvis nu jeg gerne vil have det valgte element til at forlive den orange som den har i hovet-stadiet, hvordan kan det så lade sig gøre?

For at gøre det mere brugervenligt kan jeg jo så vise hele tiden hvad det er de har valgt - det må kunne gøre på en smart måde ;-)
Avatar billede w13 Novice
03. oktober 2008 - 15:00 #11
Ja, så skal du vel bare sætte det i funktionen marker(). :)

F.eks.:

function marker(elm, part){
  var sel = elm.parentNode.getElementsByTagName("select")[0];
  elm.style.backgroundImage="url(images/"+part+"Hover.gif)";
  for(i=0, im=sel.length; im>i; i++){
    if(sel.options[i].value.toLowerCase() == part.toLowerCase()){
      sel.options[i].selected = true;
      return;
    }
  }
}

Men det vil selvfølgelig konflikte, når du har en hover på også.
Avatar billede roenving Novice
03. oktober 2008 - 15:03 #12
-- så når vi frem til:

<div class="group">
<a class="head" href="#" onclick="marker(this,'head');return false;"></a>
<a class="body" href="#" onclick="marker(this,'body');return false;"></a>
<a class="legs" href="#" onclick="marker(this,'legs');return false;"></a>

<select>
  <option>Kropsdel</option>
  <option value="head">Hoved</option>
  <option value="body">Mave</option>
  <option value="legs">Ben</option>
</select>
</div>

<script type="text/javascript">
function marker(elm, part){
  var sel = elm.parentNode.getElementsByTagName("select")[0];
  for(i=0, im=sel.length; im>i; i++){
    if(sel.options[i].value.toLowerCase() == part.toLowerCase()){
      sel.options[i].selected = true;
      var links = elm.parentNode.getElementsByTagName("a");
      for(j=0,jm=links.length;jm>j;j++)
        links[j].style.backgroundImage = "";
      elm.style.backgroundImage = elm.style.backgroundImage.replace(/\.gif/,"Hover.gif");
      return;
    }
  }
}
</script>
Avatar billede ssv Nybegynder
03. oktober 2008 - 15:10 #13
Jeg har igen opdateret demo-linket med roenvings nyeste svar - og igen ser det desværre ud til der er noget galt - men hvad :-)?
Avatar billede w13 Novice
03. oktober 2008 - 15:12 #14
Når der sker en mouseout, vil baggrunden vel bare blive fjernet. Prøv at fjerne din mouseover og mouseout og se, om den markerer rigtigt ved klik.
Avatar billede roenving Novice
03. oktober 2008 - 15:15 #15
Hvad sker der, hvis du bruger background-image i dit stylesheet ?-)
Avatar billede ssv Nybegynder
03. oktober 2008 - 15:30 #16
Igen, opdateret. Hvis jeg forstår dig ret roenving, skal jeg rette "background" til "background-image"? I så fald, har jeg gjort det nu.

Og jeg har udkommenteret hoveren på linksene, men der er stadig ingen orange baggrund når man har valgt en kropsdel :-)
Avatar billede roenving Novice
03. oktober 2008 - 15:33 #17
Prøvede du kun at gøre det ene, altså ændre til background-image ?-)
Avatar billede ssv Nybegynder
03. oktober 2008 - 16:02 #18
Jeg har ændret til background-image, ja. Og jeg har fjernet hover-stadiet på linksene, som jeg går ud fra er det w13 hentyder til.
Avatar billede roenving Novice
03. oktober 2008 - 17:17 #19
-- har du prøvet at lade hover blive ?-)

-- har måske tid til at kigge ordentlig på det om et kvarters tid ...
Avatar billede ssv Nybegynder
03. oktober 2008 - 17:31 #20
Jeg lavede lige en test med hover sat til igen, dog uden noget andet resultat end som før - at det ikke virkede.

Super hvis du har tid til at kigge på det, tak for det :-)
Avatar billede roenving Novice
03. oktober 2008 - 17:32 #21
Egentlig var det en ren forglemmelse, for backgroundImage indeholder jo ikke noget på elementet, når det er sat i stylesheetet ,-(

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Just testing</title>
<style type="text/css">
body { font: 11px/15px Verdana, Arial, Helvetica, sans-serif; color: #555; }
select { font: 11px Verdana, Arial, Helvetica, sans-serif; padding: 2px 1px; width: 160px; margin: 20px 0 0 15px; }
.overall { width: 655px; margin: 20px auto; border: 2px solid #ccc; padding: 10px 10px 25px 10px; }
.group { width: 205px; float: left; border-right: 1px solid #f4f4f4; padding: 0 0 0 10px; }
.group h1 { font: normal 18px/35px Calibri, "Trebuchet MS", Verdana, Arial, sans-serif; text-align: center; color: #ff9999; margin: 0; padding: 0; width: 190px; display: block; float: left; }
.group a.head { background-image: url(http://proads.dk/simon/get/images/head.gif); height: 139px; width: 191px; float: left; outline: 0; }
.group a.head:hover { background-image: url(http://proads.dk/simon/get/images/headHover.gif); }
.group a.body { background-image: url(http://proads.dk/simon/get/images/body.gif); width: 191px; height: 131px; float: left; outline: 0;  }
.group a.body:hover { background-image: url(http://proads.dk/simon/get/images/bodyHover.gif); }
.group a.legs { background-image: url(http://proads.dk/simon/get/images/legs.gif); height: 79px; width: 191px; float: left; outline: 0;  }
.group a.legs:hover { background-image: url(http://proads.dk/simon/get/images/legsHover.gif); }
</style>
<script type="text/javascript">
function marker(elm, part){
  var sel = elm.parentNode.getElementsByTagName("select")[0];
  for(i=0, im=sel.length; im>i; i++){
    if(sel.options[i].value.toLowerCase() == part.toLowerCase()){
      sel.options[i].selected = true;
      var links = elm.parentNode.getElementsByTagName("a");
      for(j=0,jm=links.length;jm>j;j++)
        links[j].style.backgroundImage = "";
      elm.style.backgroundImage = "url(http://proads.dk/simon/get/images/" + part + "Hover.gif)";
      return;
    }
  }
}
</script>
</head>

<body>
<div class="overall">
<div class="group">
<h1>Krop 1</h1>
<a class="head" href="#" onclick="marker(this,'head');return false;"></a>
<a class="body" href="#" onclick="marker(this,'body');return false;"></a>
<a class="legs" href="#" onclick="marker(this,'legs');return false;"></a>

<select>
  <option>Kropsdel</option>
  <option value="head">Hoved</option>
  <option value="body">Mave</option>
  <option value="legs">Ben</option>
</select>
</div>

<div class="group">
<h1>Krop 2</h1>
<a class="head" href="#" onclick="marker(this,'head');return false;"></a>
<a class="body" href="#" onclick="marker(this,'body');return false;"></a>
<a class="legs" href="#" onclick="marker(this,'legs');return false;"></a>

<select>
  <option>Kropsdel</option>
  <option value="head">Hoved</option>
  <option value="body">Mave</option>
  <option value="legs">Ben</option>
</select>
</div>

<div class="group" style="border:0;">
<h1>Krop 3</h1>
<a class="head" href="#" onclick="marker(this,'head');return false;"></a>
<a class="body" href="#" onclick="marker(this,'body');return false;"></a>
<a class="legs" href="#" onclick="marker(this,'legs');return false;"></a>

<select>
  <option>Kropsdel</option>
  <option value="head">Hoved</option>
  <option value="body">Mave</option>
  <option value="legs">Ben</option>
</select>
</div>

<div style="clear: both;"></div>
</div>
</body>
</html>

-- der kommer godt underligheder i min IE6, men FireFox og Opera tager den helt pænt !o]

-- bemærk også, at jeg af hensyn til bl.a. IE6- har skrevet selektorerne en anelse anderledes (hvilket faktisk er den rigtige !-)

Els velbekomme '-)
Avatar billede ssv Nybegynder
03. oktober 2008 - 17:35 #22
Det virker jo super, tusind tak for hjælpen :-) I 6.0 her fungerer det udemærket her, så det er jo bare perfekt.
Avatar billede roenving Novice
03. oktober 2008 - 17:39 #23
Ja, scriptet osv. virker fint, men hover-tingene giver godt nok mærværdigheder, hvor det orange eller sorte hoved nogen gange kommer frem, når grænsen til maven krydses m.m.m. ...

-- og tak for point ;~}
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