Как создать выпадающее меню с отображением выбранной переменной - PullRequest
1 голос
/ 14 марта 2020

Я ищу какой-то (возможно, простой) совет, который, похоже, не нахожу в Google. У меня есть раскрывающееся меню, например:

/* Dropdown Button */

.btn {
  background-color: #D6182D;
  color: white;
  padding: 8px;
  font-size: 16px;
  border: none;
}


/* The container <div> - needed to position the dropdown content */

.dropdown {
  position: relative;
  display: inline-block;
  border: 10px;
}


/* Dropdown Content (Hidden by Default) */

.dropdown-content {
  display: none;
  position: absolute;
  background-color: #f1f1f1;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
  z-index: 1;
}


/* Links inside the dropdown */

.dropdown-content a {
  color: black;
  padding: 12px 16px;
  text-decoration: none;
  display: block;
}


/* Change color of dropdown links on hover */

.dropdown-content a:hover {
  background-color: #ddd;
}


/* Show the dropdown menu on hover */

.dropdown:hover .dropdown-content {
  display: block;
}


/* Change the background color of the dropdown button when the dropdown content is shown */

.dropdown:hover .btn {
  background-color: rgb(134, 30, 42);
}
<center>
  <div class="dropdown">
    <a class="btn btn-secondary dropdown-toggle" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
    Chose a month to display</a>

    <div class="dropdown-content">
      <a class="nav-link" href="/jan">
        <font color="black">January 2018</font>
      </a>
      <a class="nav-link" href="/feb">
        <font color="black">February 2018</font>
      </a>
      <a class="nav-link" href="/mar">
        <font color="black">March 2018</font>
      </a>
      <a class="nav-link" href="/tot">
        <font color="black">Total</font>
      </a>
    </div>
  </div>
</center>

В основном взято из w3schools ..

Теперь вместо «Выберите месяц для отображения» я хотел бы отобразить выбранную опцию, как только кто-то нажимает на него. Ребята, у вас есть идеи, как изменить код для этого?

Ждем ваших ответов: -)

Ответы [ 2 ]

0 голосов
/ 14 марта 2020

Я внес некоторые изменения в ваш HTML, чтобы сделать его более семантическим c, а для выпадающего текста вы можете попробовать обычный javascript. Я надеюсь, это поможет вам.

Для старого значения вы можете хранить свое значение где-нибудь, например, в localalstorage

Например, я сохраняю старое выбранное значение в локальном хранилище.

const months = document.getElementsByClassName("dropdown-content");
if(localStorage.getItem("oldval")){
 document.getElementById("dropdownMenuLink").innerHTML = 
 localStorage.getItem("oldval"); 
}
Array.from(months).map(month=>{
 month.addEventListener("click",(e)=>{
 let selectedValue = e.target.textContent;
 document.getElementById("dropdownMenuLink").innerHTML = 
 selectedValue;
 localStorage.setItem("oldval",selectedValue);
});
});

const months = document.getElementsByClassName("dropdown-content");

Array.from(months).map(month=>{
  month.addEventListener("click",(e)=>{
    e.preventDefault();
    let selectedValue = e.target.textContent;
    document.getElementById("dropdownMenuLink").innerHTML = selectedValue;
  });
});
/* Dropdown Button */

.btn {
  background-color: #D6182D;
  color: white;
  padding: 8px;
  font-size: 16px;
  border: none;
  min-width: 200px;
  display:inline-block;
  text-decoration:none;
}


/* The container <div> - needed to position the dropdown content */

.dropdown {
  position: relative;
  display: inline-block;
  border: 10px;
}


/* Dropdown Content (Hidden by Default) */

.dropdown-content {
  display: none;
  position: absolute;
  background-color: #f1f1f1;
  min-width: 200px;
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
  z-index: 1;
  list-style: none;
  padding:0;
  margin:0;
}


/* Links inside the dropdown */

.dropdown-content a {
  color: black;
  padding: 12px 16px;
  text-decoration: none;
  display: block;
}


/* Change color of dropdown links on hover */

.dropdown-content a:hover {
  background-color: #ddd;
}


/* Show the dropdown menu on hover */

.dropdown:hover .dropdown-content {
  display: block;
}


/* Change the background color of the dropdown button when the dropdown content is shown */

.dropdown:hover .btn {
  background-color: rgb(134, 30, 42);
}
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  <center>
  <div class="dropdown">
    <a class="btn btn-secondary dropdown-toggle" href="#" role="button" id="dropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
    Chose a month to display</a>

    <ul class="dropdown-content">
      <li><a class="nav-link" href="/jan">
        January 2018
        </a></li>
      <li><a class="nav-link" href="/feb">
        February 2018
        </a></li>
      <li><a class="nav-link" href="/mar">
        March 2018
        </a></li>
      <li><a class="nav-link" href="/tot">
        Total
        </a></li>
    </ul>
  </div>
</center>
</body>
</html>
0 голосов
/ 14 марта 2020

Как я вижу, вы используете <div> и <a> для достижения раскрывающегося списка, который вовсе не является неправильным, но не является правильным способом html.

Подробнее Теги <select> и <option>, которые помогут вам получить эффект выпадающего списка, а также динамически устанавливать тег value внутри <option> при нажатии. используя getElementById('id-of-element')

, читайте о getElementById здесь

Также, если вы хотите перенаправления, когда пользователь щелкает по нему, вы можете использовать тег <a> внутри тега <option>.

выберите тег

надеюсь, что это поможет вам, оставьте любые сомнения, если вы будете рады помочь вам: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...