javascript - Växla klass från rullgardinsmeny


Jag försöker växla en klass genom att välja ett alternativ i rullgardinsmenyn, jag har försökt använda en alert() för att kontrollera om det fungerar men jag verkar inte få det att fungera.

HTML:

<html>
<body>
    <select id="dropdown">
        <option value="1">Steinkjer</option>
        <option value="2">Verdal</option>
    </select>
</body>
</html>

Javascript:

$('#dropdown option:selected').click(function(){
    var getText = $('#dropdown option').text();
    alert($('.overlay-'+getText));
});

Vänligen hjälp mig att lösa detta problem.

Svar #1

$ ('#dropdown option:selected') är inte ett live-objekt. Din kod binder klickhanteraren till det valda alternativet vid sidladdning. Du bör antingen använda händelsedelegering eller bättre lyssna på change-händelsen för select-elementet.

$('#dropdown').on('change', function() {
    // Get text content of the selected option
    var getText = $('option:selected', this).text();
    // Get current value of the select element
    // var getValue = this.value;
    console.log(getText);
    console.log($('.overlay-'+getText));
});

Svar #2

Du behöver:

  • Kontrollera att document.ready har körts
  • Tilldela ändringshändelsen

För att binda vissa händelser till DOM-element krävs ett document.ready, för att säkerställa att DOM-elementet är skapat vid tidpunkten då du associerar händelsen.

  • En sida kan inte manipuleras säkert förrän dokumentet är "klart." : https://learn.jquery.com/using-jquery-core/document-ready/

Kolla på det här utdraget:

$(document).ready(function() {

  $('#dropdown').change(function() {
    var getText = $('#dropdown option:selected').html();
    $("#test").removeClass();
    $("#test").toggleClass("overlay-" + getText);
  });



});
.overlay-Steinkjer {
  background-color: red;
}
.overlay-Verdal {
  background-color: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<html>

<body>
  <select id="dropdown">
    <option value="1">Steinkjer</option>
    <option value="2">Verdal</option>
  </select>

  <p id="test">test paragraph</p>
</body>

</html>