webForumDet fria alternativet

Select och lager

JavaScript

10 svar · 371 visningar · startad av Asa

Medlem sedan dec. 20011 860 inlägg
Frågan#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å.

Medlem sedan dec. 20025 483 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>
Medlem sedan dec. 20011 860 inlägg
#3

Supertack! FUnkade precis som jag ville!

Medlem sedan dec. 20011 860 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!

Medlem sedan dec. 20025 483 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>
Medlem sedan dec. 20011 860 inlägg
#6

Återigen tack :)

Medlem sedan dec. 20025 483 inlägg
#7

Vassego! :)

Medlem sedan dec. 20011 860 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?

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

:)

Medlem sedan dec. 20011 860 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.

Medlem sedan dec. 20025 483 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.

:)

251 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)