javascript - 如何使用 onchange 事件更新输入值并在 vanilla Javascript 中获取值?
问题描述
我正在做一个任务,我使用 fetch 进行简单的 API 调用,以按品种检索狗的图像。我无法解决的一个问题是,当我尝试检索不同品种的图像时,输入值永远不会改变。默认值,即“猎犬”,在我按下提交后重新出现。我知道我需要将 onchange 事件附加到我的输入中,但我不确定如何编写它或在触发 onchange 事件后如何获取值。任何帮助将不胜感激。我最初是用 jQuery 编写的,但决定用 vanilla Javascript 重写它,所以这就是没有 jQuery 的原因。我在我正在努力解决的问题上加了一个“<---”。
PS我知道我的代码不是很好,我是新手。
Javascript
function getJson(breed) {
fetch("https://dog.ceo/api/breed/" + breed + "/images/random")
.then((response) => response.json())
.then((responseJson) => displayResults(responseJson));
}
function displayResults(responseJson) {
const dogImage = responseJson.message;
let breedImage = "";
let container = document.createElement("div");
console.log(dogImage);
breedImage += `<img src="${dogImage}">`;
container.innerHTML = breedImage;
document.querySelector(".results-img").innerHTML = "";
document.querySelector(".results-img").appendChild(container);
}
function submitButton() {
let breedName = document.querySelector("#numberValue").value;
breedName.addEventListener().onchange.value; <---
document.getElementById("dog-input").addEventListener("submit", (e) => {
e.preventDefault();
getJson(breedName);
});
}
submitButton();
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Dog Api</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<div class="container">
<form>
<input id="numberValue" type="text" value="hound" />
<button type="submit" class="submit-button">Submit</button>
</form>
<section class="results">
<h2>Look at these Dogs!</h2>
<div class="results-img"></div>
</section>
</div>
<script src="main.js"></script>
</body>
</html>
解决方案
您不需要onchange
事件处理程序。当前,您在breedName
调用时将输入的值存储在submitButton
. 这意味着它breedName
永远不会改变,因为它只是对当时价值的引用。
而是创建对元素的引用并value
在提交事件处理程序中读取属性。这将获得您提交时的值。
function getJson(breedName) {
console.log(breedName);
}
function submitButton() {
const form = document.querySelector('#dog-form');
const input = document.querySelector('#numberValue');
form.addEventListener('submit', event => {
event.preventDefault();
const breedName = input.value;
getJson(breedName);
});
}
submitButton()
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Dog Api</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<div class="container">
<form id="dog-form">
<input id="numberValue" type="text" value="hound" />
<button type="submit" class="submit-button">Submit</button>
</form>
<section class="results">
<h2>Look at these Dogs!</h2>
<div class="results-img"></div>
</section>
</div>
<script src="main.js"></script>
</body>
</html>
推荐阅读
- c# - C# Vim.VMWare - 从库存添加
- c++ - OpenCV C++ 检测直线和坐标并将其移动到另一个图像
- fs - 如何使用 fs.write?
- mongodb - 使用 Graphql-js 模式克服代码重复
- javascript - 终端( -bash: create-react-app: command not found)似乎是错误
- c# - 具有多个派生对象的列表。如何访问派生中的字段
- python - AttributeError: 'AnonymousUserMixin' 对象没有属性 'can'
- django - 根据 forms.py 文件中定义的字段创建自动完成功能。Django-Python
- python-3.x - Python 类范围和线程
- ssl - 如何在 Alfresco SharePoint 协议中启用 SSL