Show a div for each option in a dropdown

1

I have to create a dropdown that will show a div with a button for each dropdown option. For now I have the divs (I have to do more) and the dropdown, but I do not have the JS to show and hide. There will be just one show.

<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title> TESTE </title>
</head>
<body>
    <label>Qual a sua cidade?</label>
    <select class="cat_dropdown" id="Cidade" name="Cidade">
    <option value="Florianopolis - sc">Florianópolis - SC</option>
    <option value="Joinville - sc">Joinville - SC</option>
    <option value="são josé - sc">São Joosé - SC</option>
    <option value="rio de janeiro - rj">Rio de Janeiro - RJ</option>
    <option value="porto alegre - rs">Porto Alegre - RS</option>
    </select>
<div id="Joinville - sc">    
<!-- INICIO FORMULARIO BOTAO PAGSEGURO -->
<form action="https://pagseguro.uol.com.br/v2/pre-approvals/request.html" method="post">
<!-- NÃO EDITE OS COMANDOS DAS LINHAS ABAIXO -->
<input type="hidden" name="code" value="6A2E84B72424217224353F91FCC1386A" />
<input type="image" src="http://beerkingstore.com.br/media/wysiwyg/bkclub/joinville-SC.png"name="submit" alt="Pague com PagSeguro - é rápido, grátis e seguro!" />
</form>
<!-- FINAL FORMULARIO BOTAO PAGSEGURO -->
</div>

<div id="rio de janeiro - rj">    
<!-- INICIO FORMULARIO BOTAO PAGSEGURO -->
<form action="https://pagseguro.uol.com.br/v2/pre-approvals/request.html" method="post">
<!-- NÃO EDITE OS COMANDOS DAS LINHAS ABAIXO -->
<input type="hidden" name="code" value="673830C750500BEDD4299F8B357559B9" />
<input type="image" src="http://beerkingstore.com.br/media/wysiwyg/bkclub/ASSINE-RJ-RJ.png"name="submit" alt="Pague com PagSeguro - é rápido, grátis e seguro!" />
</form>
<!-- FINAL FORMULARIO BOTAO PAGSEGURO -->
</div>

<div id="porto alegre - rs">
<!-- INICIO FORMULARIO BOTAO PAGSEGURO -->
<form target="pagseguro" action="https://pagseguro.uol.com.br/v2/pre-approvals/request.html" method="post">
<!-- NÃO EDITE OS COMANDOS DAS LINHAS ABAIXO -->
<input type="hidden" name="code" value="1C52DCC32E2E6B1884B18F8740EB45F2" />
<input type="image" src="http://beerkingstore.com.br/media/wysiwyg/bkclub/assine-poa.png"name="submit" alt="Pague com PagSeguro - é rápido, grátis e seguro!" />
</form>
<!-- FINAL FORMULARIO BOTAO PAGSEGURO -->
</div>

</body>
</html>
    
asked by anonymous 06.05.2014 / 16:46

1 answer

2

It would be practical to have a class for all your divs / cities in your HTML. So it would be much easier to select all these divs

<div id="Joinville - sc" class="divcidade"> 

To use simple javascript you can use it as well

var select = document.querySelector('select#Cidade');
var cidades = document.querySelectorAll('.divcidade');

function esconder() {
    for (var i = 0; i < cidades.length; i++) {
        cidades[i].style.display = 'none';
    };
}

select.addEventListener('change', function () {
    esconder()
    var id = this.options[this.selectedIndex].value;
    document.getElementById(id).style.display = 'block';
});

esconder();

Example

This solution works like this:

  • Select the select and save in a variable, and the same with the city divs
  • creates a function that traverses all divs and hides them
  • tie an event handler to run code when select changes
  • [when select change] hide all divs and then show only the one that has the right ID. For this I used the value of option to select a new element by ID

If you do not want to change HTML, you can also use this to generate the array cidades :

var cidades = [];

for (var i = 0; i < select.options.length; i++) {
    var id = select.options[i].value;
    var estaCidade = document.getElementById(id);
    estaCidade && cidades.push(estaCidade)
}

Example

    
06.05.2014 / 17:05