滚动列表不起作用

时间:2018-08-22 14:37:23

标签: javascript jquery html css

我遵循了“教程” here,但是没有用。我将所有相关代码放在下面。我相当确定它不起作用的原因是因为我的正文中有overflow-y: hidden;,并且列表包含在正文中,因此它可能是默认的。但是,如果我不这样做,整个页面将滚动,而不仅仅是列表。非常感谢。

function SearchBar() {
    var input, filter, ul, li, a, i;
    input = document.getElementById("myInput");
    filter = input.value.toUpperCase();
    ul = document.getElementById("myUL");
    li = ul.getElementsByTagName("li");
    for (i = 0; i < li.length; i++) {
        a = li[i].getElementsByTagName("a")[0];
        if (a.innerHTML.toUpperCase().indexOf(filter) > -1) {
            li[i].style.display = "";
        } else {
            li[i].style.display = "none";
        }
    }
  }
body{
  background-color: #081543;
  overflow-y:hidden;
}

p{
  color: white;
  text-align: center;
  height: 25%;
  font-size: 25pt;
  margin-left: 30%;
  margin-right:30%;
  font-family: sans-serif;
}

#logo{
display: block;
margin-left: auto;
margin-right: auto;
width: 50%;
}

* {
  box-sizing: border-box;
}

#myInput {
  width: 50%;
  font-size: 16px;
  padding: 12px 0px 12px 10px;
  border: 1px solid #ddd;
  margin-bottom: 12px;
  margin-left: 25%;
  margin-right: 25%;
}

ul{
  min-height: 200px;
}
#myUL {
  list-style-type: none;
  padding: 0;
  margin: 0;
  overflow: scroll;
}

#myUL li a {
  border: 1px solid #ddd;
  margin-top: -1px;
  background-color: #f6f6f6;
  width: 50%;
  margin-left: 25%;
  margin-right: 25%;
  padding: 12px;
  text-decoration: none;
  font-size: 18px;
  color: black;
  display: block;


}

#myUL li a:hover:not(.header) {
  background-color: #eee;
}
<!Doctype html>

<body>


  <input type="text" id="myInput" onkeyup="SearchBar()" placeholder="type in an item" title="Type in a name">

<ul id="myUL">
  <li><a href="main.html" onclick=''>apple</a></li>
  <li><a href="main.html" onclick=''>fruit</a></li>
  <li><a href="main.html" onclick=''>shirt</a></li>
  <li><a href="main.html" onclick=''>thing</a></li>
  <li><a href="main.html" onclick=''>stack</a></li>
  <li><a href="main.html" onclick=';'>overflow</a></li>
  <li><a href="main.html" onclick=''>list</a></li>
</ul>



</body>

3 个答案:

答案 0 :(得分:0)

在元素height的{​​{1}}上使用min-height

ul
function SearchBar() {
    var input, filter, ul, li, a, i;
    input = document.getElementById("myInput");
    filter = input.value.toUpperCase();
    ul = document.getElementById("myUL");
    li = ul.getElementsByTagName("li");
    for (i = 0; i < li.length; i++) {
        a = li[i].getElementsByTagName("a")[0];
        if (a.innerHTML.toUpperCase().indexOf(filter) > -1) {
            li[i].style.display = "";
        } else {
            li[i].style.display = "none";
        }
    }
  }
body{
  background-color: #081543;
  overflow-y:hidden;
}

p{
  color: white;
  text-align: center;
  height: 25%;
  font-size: 25pt;
  margin-left: 30%;
  margin-right:30%;
  font-family: sans-serif;
}

#logo{
display: block;
margin-left: auto;
margin-right: auto;
width: 50%;
}

* {
  box-sizing: border-box;
}

#myInput {
  width: 50%;
  font-size: 16px;
  padding: 12px 0px 12px 10px;
  border: 1px solid #ddd;
  margin-bottom: 12px;
  margin-left: 25%;
  margin-right: 25%;
}

ul{
  height: 150px;
}
#myUL {
  list-style-type: none;
  padding: 0;
  margin: 0;
  overflow: scroll;
}

#myUL li a {
  border: 1px solid #ddd;
  margin-top: -1px;
  background-color: #f6f6f6;
  width: 50%;
  margin-left: 25%;
  margin-right: 25%;
  padding: 12px;
  text-decoration: none;
  font-size: 18px;
  color: black;
  display: block;


}

#myUL li a:hover:not(.header) {
  background-color: #eee;
}

答案 1 :(得分:0)

要使滚动条出现,您需要使ul的高度小于其子元素的高度,以便向其中滚动内容。您也可以使用overflow-y: auto而不是overflow: auto隐藏水平滚动条。

function SearchBar() {
  var input, filter, ul, li, a, i;
  input = document.getElementById("myInput");
  filter = input.value.toUpperCase();
  ul = document.getElementById("myUL");
  li = ul.getElementsByTagName("li");
  for (i = 0; i < li.length; i++) {
    a = li[i].getElementsByTagName("a")[0];
    if (a.innerHTML.toUpperCase().indexOf(filter) > -1) {
      li[i].style.display = "";
    } else {
      li[i].style.display = "none";
    }
  }
}
body {
  background-color: #081543;
  overflow-y: hidden;
}

p {
  color: white;
  text-align: center;
  height: 25%;
  font-size: 25pt;
  margin-left: 30%;
  margin-right: 30%;
  font-family: sans-serif;
}

#logo {
  display: block;
  margin-left: auto;
  margin-right: auto;
  width: 50%;
}

* {
  box-sizing: border-box;
}

#myInput {
  width: 50%;
  font-size: 16px;
  padding: 12px 0px 12px 10px;
  border: 1px solid #ddd;
  margin-bottom: 12px;
  margin-left: 25%;
  margin-right: 25%;
}

ul {
  height: 200px;
}

#myUL {
  list-style-type: none;
  padding: 0;
  margin: 0;
  overflow-y: scroll;
}

#myUL li a {
  border: 1px solid #ddd;
  margin-top: -1px;
  background-color: #f6f6f6;
  width: 50%;
  margin-left: 25%;
  margin-right: 25%;
  padding: 12px;
  text-decoration: none;
  font-size: 18px;
  color: black;
  display: block;
}

#myUL li a:hover:not(.header) {
  background-color: #eee;
}
<!Doctype html>

<body>


  <input type="text" id="myInput" onkeyup="SearchBar()" placeholder="type in an item" title="Type in a name">

  <ul id="myUL">
    <li><a href="main.html" onclick=''>apple</a></li>
    <li><a href="main.html" onclick=''>fruit</a></li>
    <li><a href="main.html" onclick=''>shirt</a></li>
    <li><a href="main.html" onclick=''>thing</a></li>
    <li><a href="main.html" onclick=''>stack</a></li>
    <li><a href="main.html" onclick=';'>overflow</a></li>
    <li><a href="main.html" onclick=''>list</a></li>
  </ul>



</body>

答案 2 :(得分:0)

您的指示将是正确的,表明主体溢出:隐藏是导致问题的原因。但是,我也注意到,在您的ul的CSS中,您有一个最小高度。所有这一切将继续增加您的ul的大小,使其超过可能隐藏的身体点。

滚动的目的是使您可以在内容的高度或宽度超过其所在元素的边界时查看内容-通过包括最小高度,它永远不会超出这些边界,而是增加边界。

将您的ul最小高度更改为高度,您会没事的:)希望能有所帮助!