Divs下拉行为类似于select或combo

时间:2016-04-01 07:15:57

标签: javascript jquery html css combobox

我在一个包装器div中有几个div,它们都代表一个实体,请看图像1.

Image1

当我点击Select 1或Select 2 ....我需要打开某种下拉列表,我需要从中选择选项并更改Select的值,但此下拉列表的设计必须相同选择div项目,查看图像2.

Image2

我查看了很多jquery select插件,但我找不到。 任何人都可以告诉我如何做到这一点,或者知道一个可以解决这个问题的插件。

这是html代码。

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>test</title>
        <meta charset="utf-8">      
        <style>
            .wrapper
            {
                width:330px;
                overflow:hidden; 
                border:solid 1px gray; 
                padding: 3px;                
            }
            .element
            {
                width:80px; 
                min-height: 30px; 
                border:solid 1px black; 
                background-color: orange; 
                text-align: center;
                line-height: 30px;                
            }
            .float-left
            {
                float: left;
            }            
        </style>
    </head>
    <body>
        <div class="wrapper">
            <div class="element float-left">
                Select 1
            </div>
            <div class="element float-left">                
                Select 2                
            </div>
            <div class="element float-left">
                Select 3
            </div>            
            <div class="element float-left">
                Select 4
            </div>            
        </div>

    </body>
</html>

感谢。

3 个答案:

答案 0 :(得分:2)

观看本教程:Simple Dropdown

UPDATE(如果想通过jquery打开):

在我的示例中删除此css:

 .main_nav > li:hover .sub_nav{
        background-color:#E4E4E4;
        display:block;
    }

并使用jquery:

    $(".main_nav > li").click(function(){
           $(' .sub_nav').show();
          $(this).find('.sub_nav').show();
   });

答案 1 :(得分:2)

我假设您了解Jquery库。 Demo here。我想你可以从中得到一个想法。做一些你能够完成工作的改变

 <style>
    .wrapper
    {
        width:330px;
        overflow:hidden; 
        border:solid 1px gray; 
        padding: 3px;                
    }
    .element
    {
        width:80px; 
        min-height: 30px; 
        border:solid 1px black; 
        background-color: orange; 
        text-align: center;
        line-height: 30px;                
    }
    .float-left
    {
        float: left;
    }            
</style>

<div class="wrapper">
    <div class="element float-left">
        Select 1
    </div>
    <div class="element float-left">                
        Select 2
        <div class='options'>
            <div class='element'>Option 1</div>
            <div class='element'>Option 2</div>
            <div class='element'>Option 3</div>
            <div class='element'>Option 4</div>
        </div>                
    </div>
    <div class="element float-left">
        Select 3
        <div class='options'>
            <div class='element'>Option 1</div>
            <div class='element'>Option 2</div>
            <div class='element'>Option 3</div>
            <div class='element'>Option 4</div>
        </div>  
    </div>            
    <div class="element float-left">
        Select 4
    </div>            
</div>
<script type="text/javascript">
$(document).ready(function(){
    $(".options").slideUp(0);
    $(".element").click(function(){
        $(".options").hide(0);
        $(this).find('.options').slideDown(100);
    });

});
</script>

答案 2 :(得分:0)

因为我不喜欢任何jqwery,这里是纯js的一些解决方案。实际上,它还没有完成并抛出一些错误,但你可以随心所欲地修复它

var Ready = function(){
  var menu = document.querySelector('.wrapper');
  var elementsList = menu.querySelectorAll('.container');
  var toggleSubmenu = function(e){
    var current = e.target.parentNode.querySelector('.submenu');
    for(var i=elementsList.length; i--;){
      var element = elementsList[i].querySelector('.submenu');
      if (element!==current && element.classList.contains('opened'))
        element.classList.remove('opened');
    }
    current.classList.toggle('opened');
  };
  menu.addEventListener('click', toggleSubmenu);
};
document.addEventListener( 'DOMContentLoaded', Ready );
.wrapper {
  width: 330px;
  overflow: hidden;
  border: solid 1px gray;
  padding: 3px;
  cursor: pointer;
}
.select, .option {
  width: 80px;
  min-height: 30px;
  border:solid 1px black;
  background-color: orange;
  text-align: center;
  line-height: 30px;
  position: relative;
}
.container {
  float: left;
}
.submenu {
  position: absolute;
  height: 0;
  overflow: hidden;
}
.opened {
  height: auto;
}
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Test</title>
</head>
<body>
  <div class="wrapper">
     <div class="container">
        <div class="select">Select 1</div>
        <div class="submenu">
          <div class="option">Option 1</div>
          <div class="option">Option 2</div>
          <div class="option">Option 3</div>
        </div>
     </div>
     <div class="container">
        <div class="select">Select 2</div>
        <div class="submenu">
          <div class="option">Option 1</div>
          <div class="option">Option 2</div>
          <div class="option">Option 3</div>
        </div>
     </div>
     <div class="container">
        <div class="select">Select 3</div>
        <div class="submenu">
          <div class="option">Option 1</div>
          <div class="option">Option 2</div>
          <div class="option">Option 3</div>
        </div>
     </div>
     <div class="container">
        <div class="select">Select 4</div>
        <div class="submenu">
          <div class="option">Option 1</div>
          <div class="option">Option 2</div>
          <div class="option">Option 3</div>
        </div>
     </div>
  </div>
</body>
</html>