javascript - 如何从选定的 li 中获取值?

标签 javascript jquery html css

我从CodePen复制了一个水平选择菜单,这里是source code

结果如下:

var btn = document.querySelector("button")
var dropdown = document.querySelector(".dropdown-options")
var optionLinks = document.querySelectorAll(".option a")
console.log(optionLinks)

btn.addEventListener("click", function(e) {
  e.preventDefault()
  console.log("btn")
  dropdown.classList.toggle("open")
});

var clickFn = function(e) {
  e.preventDefault()
  dropdown.classList.remove("open")
  btn.innerHTML = this.text
  var activeLink = document.querySelector(".option .active")

  if (activeLink) {
    activeLink.classList.remove("active")
  }
  this.classList.add("active")
}
for (var i = 0; i < optionLinks.length; i++) {
  optionLinks[i].addEventListener("mousedown", clickFn, false)
}
.container {
  max-width: 500px;
  margin-top: 10px;
  margin-left: 0px;
}
.container button {
  position: relative;
  background: none;
  border: none;
  outline: none;
  font-size: 16px;
  border-bottom: 2px solid #9b9b9b;
  padding-bottom: 8px;
  min-width: 150px;
  text-align: left;
  outline: none;
  cursor: pointer;
  z-index: 2;
}
.container button:after {
  content: '▾';
  position: absolute;
  right: 0px;
  top: 0%;
  color: rgb(142, 142, 142);
}
.container .dropdown {
  position: relative;
}
.container .dropdown .dropdown-options {
  list-style: none;
  margin: 0;
  padding: 0;
  background: white;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.24);
  display: inline-block;
  position: absolute;
  left: 0;
  bottom: 0;
  opacity: 0;
  -webkit-transform: scale(0.8) translate3d(-20px, 0px, 0);
          transform: scale(0.8) translate3d(-20px, 0px, 0);
  -webkit-transition: opacity 0.1s cubic-bezier(0.5, 2, 0.5, 0.75), -webkit-transform 0.3s cubic-bezier(0.5, 2, 0.5, 0.75);
  transition: opacity 0.1s cubic-bezier(0.5, 2, 0.5, 0.75), -webkit-transform 0.3s cubic-bezier(0.5, 2, 0.5, 0.75);
  transition: opacity 0.1s cubic-bezier(0.5, 2, 0.5, 0.75), transform 0.3s cubic-bezier(0.5, 2, 0.5, 0.75);
  transition: opacity 0.1s cubic-bezier(0.5, 2, 0.5, 0.75), transform 0.3s cubic-bezier(0.5, 2, 0.5, 0.75), -webkit-transform 0.3s cubic-bezier(0.5, 2, 0.5, 0.75);
  -webkit-transform-origin: 0 100%;
  transform-origin: 0 100%;
  z-index: 1;
}
.container .dropdown .dropdown-options.open {
  opacity: 1;
  -webkit-transform: scale(1) translate3d(0, 0, 0);
          transform: scale(1) translate3d(0, 0, 0);
  z-index: 5;
}
.container .dropdown .dropdown-options li {
  display: inline-block;
}
.container .dropdown .dropdown-options li a {
  text-decoration: none;
  display: inline-block;
  padding: 10px 16px;
  color: #2975DA;
}
.container .dropdown .dropdown-options li a:hover {
  color: #2269c7;
}
.container .dropdown .dropdown-options li a.active {
  border-bottom: 2px solid #9b9b9b;
  color: #9b9b9b;
}
.container .dropdown .dropdown-options li a.active:hover {
  color: #9b9b9b;
}
<div class="container">
  <div class="dropdown">
    <button>Type</button>
    <ul class="dropdown-options">
      <li class="option">
        <a href="#">A</a>
      </li>
      <li class="option">
        <a href="#">B</a>
      </li>
      <li class="option">
        <a href="#">C</a>
      </li>
      <li class="option">
        <a href="#">D</a>
      </li>
    </ul>
  </div>
</div>

我在获取 selected li 时遇到了问题在我提交此表格之前。这不是 <select>我在表单中使用此菜单,是否有一种简单的方法来获取 li 的选定值?使用 JavaScript

最佳答案

给您一个解决方案 https://jsfiddle.net/9Lk8vwvL/

var btn = document.querySelector("button")
var dropdown = document.querySelector(".dropdown-options")
var optionLinks = document.querySelectorAll(".option a")

btn.addEventListener("click", function(e) {
  e.preventDefault()
  dropdown.classList.toggle("open")
});

var clickFn = function(e) {
  console.log(e.target.innerText);
  e.preventDefault()
  dropdown.classList.remove("open")
  btn.innerHTML = this.text
  var activeLink = document.querySelector(".option .active")

  if (activeLink) {
    activeLink.classList.remove("active")
  }
  this.classList.add("active")
}
for (var i = 0; i < optionLinks.length; i++) {
  optionLinks[i].addEventListener("mousedown", clickFn, false)
}
.container {
  max-width: 500px;
  margin-top: 10px;
  margin-left: 0px;
}
.container button {
  position: relative;
  background: none;
  border: none;
  outline: none;
  font-size: 16px;
  border-bottom: 2px solid #9b9b9b;
  padding-bottom: 8px;
  min-width: 150px;
  text-align: left;
  outline: none;
  cursor: pointer;
  z-index: 2;
}
.container button:after {
  content: '▾';
  position: absolute;
  right: 0px;
  top: 0%;
  color: rgb(142, 142, 142);
}
.container .dropdown {
  position: relative;
}
.container .dropdown .dropdown-options {
  list-style: none;
  margin: 0;
  padding: 0;
  background: white;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.24);
  display: inline-block;
  position: absolute;
  left: 0;
  bottom: 0;
  opacity: 0;
  -webkit-transform: scale(0.8) translate3d(-20px, 0px, 0);
          transform: scale(0.8) translate3d(-20px, 0px, 0);
  -webkit-transition: opacity 0.1s cubic-bezier(0.5, 2, 0.5, 0.75), -webkit-transform 0.3s cubic-bezier(0.5, 2, 0.5, 0.75);
  transition: opacity 0.1s cubic-bezier(0.5, 2, 0.5, 0.75), -webkit-transform 0.3s cubic-bezier(0.5, 2, 0.5, 0.75);
  transition: opacity 0.1s cubic-bezier(0.5, 2, 0.5, 0.75), transform 0.3s cubic-bezier(0.5, 2, 0.5, 0.75);
  transition: opacity 0.1s cubic-bezier(0.5, 2, 0.5, 0.75), transform 0.3s cubic-bezier(0.5, 2, 0.5, 0.75), -webkit-transform 0.3s cubic-bezier(0.5, 2, 0.5, 0.75);
  -webkit-transform-origin: 0 100%;
  transform-origin: 0 100%;
  z-index: 1;
}
.container .dropdown .dropdown-options.open {
  opacity: 1;
  -webkit-transform: scale(1) translate3d(0, 0, 0);
          transform: scale(1) translate3d(0, 0, 0);
  z-index: 5;
}
.container .dropdown .dropdown-options li {
  display: inline-block;
}
.container .dropdown .dropdown-options li a {
  text-decoration: none;
  display: inline-block;
  padding: 10px 16px;
  color: #2975DA;
}
.container .dropdown .dropdown-options li a:hover {
  color: #2269c7;
}
.container .dropdown .dropdown-options li a.active {
  border-bottom: 2px solid #9b9b9b;
  color: #9b9b9b;
}
.container .dropdown .dropdown-options li a.active:hover {
  color: #9b9b9b;
}
<div class="container">
  <div class="dropdown">
    <button>Type</button>
    <ul class="dropdown-options">
      <li class="option">
        <a href="#">A</a>
      </li>
      <li class="option">
        <a href="#">B</a>
      </li>
      <li class="option">
        <a href="#">C</a>
      </li>
      <li class="option">
        <a href="#">D</a>
      </li>
    </ul>
  </div>
</div>

由于您在 clickFn 方法中有事件,您可以使用 console.log(e.target.innerText);

希望这能帮助您获得选定的li值。

关于javascript - 如何从选定的 li 中获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46312906/

相关文章:

javascript - 所有的 JavaScript 文字对象都彼此不同吗

javascript - 用于具有相同名称的多个输入字段的 Jquery 选择器

jquery - 使用最新的 jquery 制作类似 "facebook mobile menu"的菜单

javascript - 使用 jQuery 获取另一个元素

xml - 为元素编写自关闭标签不是传统上空的坏习惯吗?

javascript - float :right using css - There must be an easy way to do this

javascript - 使用 Shift 键时如何限制选择元素中的选定选项

javascript - 将外部 javascript 添加到用户控件...但将文件引用放在页面底部

javascript - Jquery val() 不带回文本框的值

html - 我有一个 a.btn 的样式,我也可以将它用于输入类型=按钮吗?