javascript - 向我的 javascript 添加一个事件侦听器,该侦听器需要使用我的下拉值来对犬种列表进行排序
问题描述
//console.log('%c HI', 'color: firebrick')
document.addEventListener('DOMContentLoaded', () => {
ceo(),
breeds()
})
function ceo() {
const imgUrl = "https://dog.ceo/api/breeds/image/random/4"
fetch(imgUrl)
.then(resp => resp.json())
.then(json => renderImages(json))
}
function renderImages(images) {
images.message.forEach(renderImage);
}
function renderImage(urlImg){
const loc = document.getElementById('dog-image-container')
//console.log(urlImg)
const img = document.createElement('img')
//console.dir(img)
img.className = "dog-image"
img.height = 300
img.src = urlImg
loc.appendChild(img)
}
function breeds() {
const breedUrl = 'https://dog.ceo/api/breeds/list/all'
fetch(breedUrl)
.then(resp => resp.json())
.then(json => breed(json))
}
function breed(dog) {
const doggo = Object.keys(dog.message)
doggo.forEach(element => breedList(element))
//dog.message.forEach(dog => dog.breedList);
}
function breedList(dogBreeds) {
const ul = document.getElementById('dog-breeds')
const li = document.createElement('li')
li.innerText = dogBreeds
ul.appendChild(li)
ul.addEventListener('click', event => {
if(event.target.matches('li')) {
event.target.style.color = 'blue'
}
})
// the source of my pain
const dropdownLetter = document.querySelector("#breed-dropdown")
dropdownLetter.addEventListener('change', event => {
let dogs = []
const letter = event.target.value
const dogsList = dogs.filter(dogs => {
return dogs.startsWith(letter)
},
)
})
}
当我输入任何内容时,dogs 过滤器不会返回一个函数,现在狗是未定义的。我需要帮助调用正确的数组,然后将捕获的结果打印到 HTML AAAAGGGGAHHHHH 我也可以发布 html。我的问题从它说我痛苦的根源开始。基本上忽略那部分我只需要使用下拉值对我的数组进行排序
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Intro to AJAX Practice Tasks</title>
<script src="src/index.js" charset="utf-8"></script>
</head>
<body>
<h1>Dog CEO</h1>
<div id="dog-image-container">
<!-- images here -->
</div>
<hr>
<label for="select-breed">Filter Breeds That Start with:</label>
<select id="breed-dropdown" name="select-breed">
<option value="a">a</option>
<option value="b">b</option>
<option value="c">c</option>
<option value="d">d</option>
</select>
<ul id="dog-breeds">
</ul>
</body>
</html>
解决方案
- 在函数中保存
dogs
数据。breeds
(声明全局变量) - 用于
dogs
在change
侦听器中过滤
检查狙击手
dropdownLetter.addEventListener("change", (event) => {
const letter = event.target.value;
const dogsList = dogs.filter((dog) => {
return dog.startsWith(letter);
});
const ul = document.getElementById("dog-breeds");
ul.innerHTML = '';
dogsList.forEach((element) => breedList(element));
});
let dogs;
document.addEventListener("DOMContentLoaded", () => {
ceo(), breeds();
});
function ceo() {
const imgUrl = "https://dog.ceo/api/breeds/image/random/4";
fetch(imgUrl)
.then((resp) => resp.json())
.then((json) => renderImages(json));
}
function renderImages(images) {
images.message.forEach(renderImage);
}
function renderImage(urlImg) {
const loc = document.getElementById("dog-image-container");
//console.log(urlImg)
const img = document.createElement("img");
//console.dir(img)
img.className = "dog-image";
img.height = 300;
img.src = urlImg;
loc.appendChild(img);
}
function breeds() {
const breedUrl = "https://dog.ceo/api/breeds/list/all";
fetch(breedUrl)
.then((resp) => resp.json())
.then((json) => breed(json));
}
function breed(dog) {
const doggo = Object.keys(dog.message);
// save dogs data
dogs = doggo;
doggo.forEach((element) => breedList(element));
//dog.message.forEach(dog => dog.breedList);
}
function breedList(dogBreeds) {
const ul = document.getElementById("dog-breeds");
const li = document.createElement("li");
li.innerText = dogBreeds;
ul.appendChild(li);
ul.addEventListener("click", (event) => {
if (event.target.matches("li")) {
event.target.style.color = "blue";
}
});
}
// the source of my pain
const dropdownLetter = document.querySelector("#breed-dropdown");
dropdownLetter.addEventListener("change", (event) => {
const letter = event.target.value;
const dogsList = dogs.filter((dog) => {
return dog.startsWith(letter);
});
const ul = document.getElementById("dog-breeds");
ul.innerHTML = '';
dogsList.forEach((element) => breedList(element));
});
<h1>Dog CEO</h1>
<div id="dog-image-container">
<!-- images here -->
</div>
<hr>
<label for="select-breed">Filter Breeds That Start with:</label>
<select id="breed-dropdown" name="select-breed">
<option value="a">a</option>
<option value="b">b</option>
<option value="c">c</option>
<option value="d">d</option>
</select>
<ul id="dog-breeds">
</ul>
推荐阅读
- php - 在 php-fpm docker 映像上更改为 pm = static
- vba - 嵌套 iif() 语句“太复杂”,无法在 MS Access 中运行
- sql-server - SQL Server:提高性能的文本搜索模式
- internationalization - 如何从相应的语言环境属性文件中加载所有属性
- c++ - std::set 与字符串键和潜在的效率损失
- python - 每 22 个字符向字符串添加一个输入,等到一个空格
- python - Discord.py - 使用命令更改前缀
- r - 如何在每行第一次出现匹配时停止匹配?
- tfs - 一旦设置了值,如何使 TFS 中的字段只读?
- c# - 当前线程调度程序创建在新 STA 线程上失败