**关闭。**此题需要debugging details。目前不接受答复。
编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答这个问题。
5天前关闭。
Improve this question
我是一个完全的JavaScript初学者,我完全被阻塞了。我试图创建一个搜索栏过滤系统,通过适应在教程中找到的代码。目标是能够按名称、导演或发行年份过滤电影列表。
这些信息中的每一个分别在标签<h1>
、<h2>
然后<h3>
之间。排序是由getElementsByTagName
完成的,并与导演和发行年份的预期一样工作,但只要我添加电影的标题,就什么都不起作用了。
从我在Firefox中看到的,原因是我存储电影名称的变量没有定义(Uncaught TypeError:a未定义)。经过一些研究,我能够读到当脚本在页面加载之前运行时会出现此错误,所以我将其放置在/body之前,但问题仍然存在。
我想知道我的代码有什么问题。
function myFunction() {
// Declare variables
var input, filter, ul, li, a, b, c, i, title, director, date;
input = document.getElementById('myInput');
filter = input.value.toUpperCase();
ul = document.getElementById("myUL");
li = ul.getElementsByTagName('li');
// Loop through all list items, and hide those who don't match the search query
for (i = 0; i < li.length; i++) {
a = li[i].getElementsByTagName("h1")[0];
b = li[i].getElementsByTagName("h2")[0];
c = li[i].getElementsByTagName("h3")[0];
title = a.textContent || a.innerText;
director = b.textContent || b.innerText;
date = c.textContent || c.innerText;
if (title.toUpperCase().indexOf(filter) > -1 || director.toUpperCase().indexOf(filter) > -1 || date.toUpperCase().indexOf(filter) > -1) {
li[i].style.display = "";
} else {
li[i].style.display = "none";
}
}
}
<ul id="myUL" class="gallery container">
<li>
<div class="overlay"></div>
<div class="info">
<a href="#" class="btn"><img src="example.jpg"></a>
<div class="description">
<h1 style="display:none">TITLE</h1>
<h2>DIRECTOR</h2>
<h3>DATE</h3>
<p>
SYNOPSIS
</p>
</div>
</div>
<div class="bg-img">
<img src="example2.jpg">
</div>
</li>
</ul>
2条答案
按热度按时间6ioyuze21#
在OP中,
<script>
标记位于正确的位置。不幸的是,这只是解决方案的一部分。问题
<input>
在哪里?title
、director
和date
。.getElementsByTagName()
)可能会出现问题。使用.querySelectorAll()
。window
的“load”事件上调用搜索函数没有什么意义。页面和用户之间的交互可以在<input id="find">
或<form>
上触发的“单击”、“输入”、“更改”或“提交”事件上处理。在本例中,<form>
环绕所有元素,并注册到"submit" event。.textContent
和.innerText
是almost identical,使用其中一个。<h1>
到<h6>
是标题,应用于按重要性顺序组织的内容标题。一个页面只能使用一个<h1>
。将<h1>
、<h2>
和<h3>
添加到每个<li>
中不仅碍眼,而且在语义上也很糟糕。使用CSS调整font-size
和font-weight
。示例中有详细注解
**注意:**源代码的某些部分标有 * 用于演示目的 *,这不是必需的,只是为了生成
<ul>
的内容。xkftehaa2#
你可以添加windoe.onload来调用你的函数,这意味着只有当页面被加载时,你的函数才会被触发。