【问题标题】:Hide custom dropdown menu li once input checked输入检查后隐藏自定义下拉菜单 li
【发布时间】:2018-08-19 09:00:26
【问题描述】:

我有一个纯 html 的自定义下拉菜单。我已经尽一切努力让它关闭,但没有任何效果。我只是希望它在选择某些内容/单击菜单外的某个位置后关闭。看来我的自定义 CSS 阻止了任何简单的解决方案。

这是我拥有的代码以及 css 和当前的 js。我知道这可能是一个常见问题,但我仍然是 javascript 的新手,即使我觉得我已经实现了所有我能做到的解决方案,但我可能没有正确地做到这一点。谢谢

$('#dropdown li').click(function() {
  $(".dd-button:first-child").text($(this).text());
});
.dropdown {
  display: inline-block;
  position: relative;
}

.wrapper {
  text-align: center;
  align-items: center;
  align-content: center;
  margin-left: -25%;
}

.dd-button {
  display: inline-block;
  border: 1px solid gray;
  border-radius: 4px;
  padding: 10px 30px 10px 20px;
  background-color: #ffffff;
  cursor: pointer;
  white-space: nowrap;
  width: 375px;
}

.dd-button:after {
  content: '';
  position: absolute;
  top: 50%;
  left: 90%;
  transform: translateY(-50%);
  width: 0;
  height: 0;
  border-left: 5px solid transparent;
  border-right: 5px solid transparent;
  border-top: 5px solid black;
}

.dd-button:hover {
  background-color: #eeeeee;
}

.dd-input {
  display: none;
}

.dd-menu {
  position: relative;
  top: 100%;
  border: 1px solid #ccc;
  border-radius: 4px;
  padding: 0;
  margin: 2px 0 0 0;
  box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.1);
  background-color: #ffffff;
  list-style-type: none;
  width: 375px;
}

.dd-input+.dd-menu {
  display: none;
}

.dd-input:checked+.dd-menu {
  display: block;
}

.dd-menu li {
  padding: 10px 20px;
  cursor: pointer;
  white-space: nowrap;
}

.dd-menu li:hover {
  background-color: #f6f6f6;
}

.dd-menu li a {
  display: block;
  margin: -10px -20px;
  padding: 10px 20px;
}

.dd-menu li.divider {
  padding: 0;
  border-bottom: 1px solid #cccccc;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrapper">
  <div id="result"></div>
  <label class="dropdown" name="dropdown">
    <div class="dd-button"> Selection</div>
    <input type="checkbox" class="dd-input center-block" id="test">
    <ul id = "dropdown"  class="dd-menu">
      <li>plan1 </li>
      <li>plan2 </li>
      <li>plan3 </li>
      <li>Plan4 </li>
    </ul>
  </label>
</div>

【问题讨论】:

    标签: javascript jquery html css drop-down-menu


    【解决方案1】:

    您可以简单地使用$(event.target).hasClass() 条件来打开或隐藏下拉菜单...

    也不要在label 中使用div,因为

    Element div not allowed as child of element label in this context.
    

    堆栈片段

    $('#dropdown li').click(function() {
      $(".dd-button:first-child").text($(this).text());
    });
    $(document).on("click", function(event) {
      if ($(event.target).hasClass("dd-button")) {
        $("#dropdown").slideDown("fast");
      } else {
        $("#dropdown").slideUp("fast");
      }
    });
    .dropdown {
      display: inline-block;
      position: relative;
    }
    
    .wrapper {
      text-align: center;
      align-items: center;
      align-content: center;
    }
    
    .dd-button {
      display: inline-block;
      border: 1px solid gray;
      border-radius: 4px;
      padding: 10px 30px 10px 20px;
      background-color: #ffffff;
      cursor: pointer;
      white-space: nowrap;
      width: 375px;
    }
    
    .dd-button:after {
      content: '';
      position: absolute;
      top: 50%;
      left: 90%;
      transform: translateY(-50%);
      width: 0;
      height: 0;
      border-left: 5px solid transparent;
      border-right: 5px solid transparent;
      border-top: 5px solid black;
    }
    
    .dd-button:hover {
      background-color: #eeeeee;
    }
    
    .dd-input {
      display: none;
    }
    
    .dd-menu {
      position: relative;
      top: 100%;
      border: 1px solid #ccc;
      border-radius: 4px;
      padding: 0;
      margin: 2px 0 0 0;
      box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.1);
      background-color: #ffffff;
      list-style-type: none;
      width: 375px;
    }
    
    .dd-input+.dd-menu {
      display: none;
    }
    
    .dd-input:checked+.dd-menu {
      display: block;
    }
    
    .dd-menu li {
      padding: 10px 20px;
      cursor: pointer;
      white-space: nowrap;
    }
    
    .dd-menu li:hover {
      background-color: #f6f6f6;
    }
    
    .dd-menu li a {
      display: block;
      margin: -10px -20px;
      padding: 10px 20px;
    }
    
    .dd-menu li.divider {
      padding: 0;
      border-bottom: 1px solid #cccccc;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div class="wrapper">
      <div id="result"></div>
      <div class="dropdown" name="dropdown">
        <div class="dd-button"> Selection</div>
        <input type="checkbox" class="dd-input center-block" id="test">
        <ul id="dropdown" class="dd-menu">
          <li>plan1 </li>
          <li>plan2 </li>
          <li>plan3 </li>
          <li>Plan4 </li>
        </ul>
      </div>
    </div>

    【讨论】:

      【解决方案2】:

      将此添加到您的 Javascript 中。

      包括id给你&lt;h1&gt;

      $('#dropdown li').click(function() {
        $('#result').replaceWith('<h1 id="result">' + $(this).text() + '</h1>');
      });
      
      $(document).ready(function() {
        // Show hide popover
        $(".dropdown").click(function() {
          $(this).find("#dropdown").slideDown("fast");
        });
      });
      
      $(document).on("click", function(event) {
        var $trigger = $(".dropdown");
        if ($trigger !== event.target && !$trigger.has(event.target).length) {
          $("#dropdown").slideUp("fast");
        }
      });
      

      你甚至可以通过$('.dropdown').hide();隐藏dropdown


      $('#dropdown li').click(function() {
        $('#result').replaceWith('<h1 id="result">' + $(this).text() + '</h1>');
      });
      
      $(document).ready(function() {
        // Show hide popover
        $(".dropdown").click(function() {
          $(this).find("#dropdown").slideDown("fast");
        });
      });
      
      $(document).on("click", function(event) {
        var $trigger = $(".dropdown");
        if ($trigger !== event.target && !$trigger.has(event.target).length) {
          $("#dropdown").slideUp("fast");
        }
      });
      .dropdown {
        display: inline-block;
        position: relative;
      }
      
      .wrapper {
        text-align: center;
        align-items: center;
        align-content: center;
        margin-left: -25%;
      }
      
      .dd-button {
        display: inline-block;
        border: 1px solid gray;
        border-radius: 4px;
        padding: 10px 30px 10px 20px;
        background-color: #ffffff;
        cursor: pointer;
        white-space: nowrap;
        width: 375px;
      }
      
      .dd-button:after {
        content: '';
        position: absolute;
        top: 50%;
        left: 90%;
        transform: translateY(-50%);
        width: 0;
        height: 0;
        border-left: 5px solid transparent;
        border-right: 5px solid transparent;
        border-top: 5px solid black;
      }
      
      .dd-button:hover {
        background-color: #eeeeee;
      }
      
      .dd-input {
        display: none;
      }
      
      .dd-menu {
        position: relative;
        top: 100%;
        border: 1px solid #ccc;
        border-radius: 4px;
        padding: 0;
        margin: 2px 0 0 0;
        box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.1);
        background-color: #ffffff;
        list-style-type: none;
        width: 375px;
      }
      
      .dd-input+.dd-menu {
        display: none;
      }
      
      .dd-input:checked+.dd-menu {
        display: block;
      }
      
      .dd-menu li {
        padding: 10px 20px;
        cursor: pointer;
        white-space: nowrap;
      }
      
      .dd-menu li:hover {
        background-color: #f6f6f6;
      }
      
      .dd-menu li a {
        display: block;
        margin: -10px -20px;
        padding: 10px 20px;
      }
      
      .dd-menu li.divider {
        padding: 0;
        border-bottom: 1px solid #cccccc;
      }
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
      <div class="wrapper">
        <div id="result"></div>
        <label class="dropdown" name="dropdown">
                 <div class="dd-button"> Selection</div>
                   <input type="checkbox" class="dd-input center-block" id="test">
                          <ul id = "dropdown"  class="dd-menu">
                               <li>plan1 </li>
                               <li>plan2 </li>
                               <li>plan3 </li>
                               <li>Plan4 </li>
                          </ul>
                </label>
      </div>

      【讨论】:

      • 但是下拉菜单仍然需要在那里,我只想在选择 li 元素时隐藏下拉计划,或者如果用户在下拉列表之外单击。
      • 请详细说明最终要求是什么。您可以通过删除JS中的第二个命令来保留下拉菜单
      • 最后的要求是用户选择一个选项后,选项菜单再次关闭。它应该看起来与单击之前相同。不会消失
      • 检查编辑,它允许您再次选择选项,和以前一样。
      • @DhavalJardosh 你没抓住重点。当您放下列表并选择一个项目,但点击远离 ddl 时,列表保持打开状态。它应该关闭。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-27
      相关资源
      最近更新 更多