webForumDet fria alternativet

Select och lager

10 svar · 369 visningar · startad av Asa

AsaMedlem sedan dec. 20011 934 inlägg
#1

Har en selectruta där jag listar olika namn. Varje namn har ett värde och vill ha så när man väljer namnet med ex värdet 1 så skall ett lager (<div>) komma fram nedanför. Hur skriver man sådant? Har sökt men hittar inte.. Vet ej vad jag skall söka på.

Peter SMedlem sedan dec. 20025 484 inlägg
#2

Exempel:

<script>
function showLayer(sel){
  var opts = sel.options,
      len  = opts.length,
      cur  = opts[sel.selectedIndex];

  for (var i = 0; i < len; ++i){
    var elm = document.getElementById("selLayer" + opts[i].value);

    if (elm){
      if (opts[i] == cur){
	elm.style.display = "block";
      } else {
	elm.style.display = "none";
      }
    }
  }
}
</script>

<select onchange="showLayer(this)">
  <option value="">-----------</option>
  <option value="1">1</option>
  <option value="2">2</option>
</select>

<div id="selLayer1" style="display:none">1</div>
<div id="selLayer2" style="display:none">2</div>
AsaMedlem sedan dec. 20011 934 inlägg
#3

Supertack! FUnkade precis som jag ville!

AsaMedlem sedan dec. 20011 934 inlägg
#4

Kompletterande fråga:
Kan man få det att visa två lager vid val i listrutan? Testade men fick bara framena lagret. Skall ha samma lagernamn!

Peter SMedlem sedan dec. 20025 484 inlägg
#5

Då får vi byta ut id mot t.ex. class, eftersom ett id måste vara unikt:

<script>
function showLayer(sel){
  var divs = document.getElementsByTagName("div"),
      dLen = divs.length;

  for (var i = 0; i < dLen; ++i){
    if (divs.item(i).className && new RegExp("^selLayer" + sel.options[sel.selectedIndex].value + "$").test(divs.item(i).className)){
      divs.item(i).style.display = "block";
    } else {
      divs.item(i).style.display = "none";
    }
  }
}
</script>

<select onchange="showLayer(this)">
  <option value="">-----------</option>
  <option value="1">1</option>
  <option value="2">2</option>
</select>

<div class="selLayer1" style="display:none">1</div>
<div class="selLayer1" style="display:none">1</div>
<div class="selLayer2" style="display:none">2</div>
AsaMedlem sedan dec. 20011 934 inlägg
#6

Återigen tack :)

Peter SMedlem sedan dec. 20025 484 inlägg
#7

Vassego! :)

AsaMedlem sedan dec. 20011 934 inlägg
#8

Sen en sista fråga hoppas jag! Om jag väljer dessa värdern så sidan laddas om vill jag att ex värdet 1 är valt och då skall lagret visas. Hur gör man detta?

Peter SMedlem sedan dec. 20025 484 inlägg
#9
window.onload = function(){
  showLayer(document.forms["namn_på_formulär"].elements["namn_på_select"]);
}

:)

AsaMedlem sedan dec. 20011 934 inlägg
#10

Hmm, jag vet att när värdet är 1 så skall lagret synas. Kan jag skriva så gär då?

<script>
window.onload = function(){
  showLayer('1');
}
</script>

Var skall koden ligga på sidan? Nåt mer man skall lägga in? Jag fåt det inte att fungera så den visar det efter sidomladdning med ett formulär.

Peter SMedlem sedan dec. 20025 484 inlägg
#11

Så här får du göra:

<script>
function showLayer(){ ... }

window.onload = function(){
  var sel = document.forms["namn_på_formulär"].elements["namn_på_select"];

  if (sel.options[sel.selectedIndex].value == 1){
    showLayer(sel);
  }
}
</script>

Dessutom upptäckte jag några rester från det första kodförslaget, så jag har uppdaterat den senaste versionen.

:)

Genererad på 376 ms · cache AV · v20260730165559-full.f96bc7eb