Show a div for each dropdown option

Asked

Viewed 1,182 times

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 don’t have the JS to show and hide. There will be only one to 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>
  • 1

    Tulio, have any framework like jQuery or Mootools? or prefer pure javascript?

1 answer

2

It would be practical to have in your HTML a class for all Divs/cities. 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 like this

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 and save to a variable, and the same with cities' Ivs
  • creates a function that traverses all Ivs and hides them
  • tie an Event Handler to run code when select change
  • [when select change] hide all Divs and then only show the one that has the right ID. I used the value of option to select a new element per ID

If you don’t want to change the HTML, you can also use it 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

Browser other questions tagged

You are not signed in. Login or sign up in order to post.