我对堆栈溢出很陌生,我想创建一个QR代码生成器,它将2输入转换成QR代码,但是代码只将第一个输入转换为QR代码,而不包括第二个输入的信息。我也试着使用querySelectorAll,但是它并没有改变我希望好的先生们能很好地教我哪里错了。
以下是HTML的代码
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="UTF-8">
<title>PracticeQRProgram</title>
<link rel="stylesheet" href="style.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div class="wrapper">
<header>
<h1>QR CODE GENERATOR</h1>
</header>
<div class="form">
<input class="form" type="text" spellcheck="false" placeholder="Enter Full Name">
<input class="form" type="text" spellcheck="false" placeholder="Enter ID no.">
<button>Submit</button>
</div>
<div class="qr-code">
<img src="" alt="qr-code">
</div>
</div>
<script src="script.js"></script>
</body>
</html>以下是javascript的代码
var wrapper = document.querySelector(".wrapper"),
qrInput = wrapper.querySelector(".form input");
generateBtn = wrapper.querySelector(".form button");
qrImg = wrapper.querySelector(".qr-code img");
let preValue;
generateBtn.addEventListener("click", () => {
let qrValue = qrInput.value.trim();
if(!qrValue || preValue === qrValue) return;
preValue = qrValue;
generateBtn.innerText = "Submitting...";
qrImg.src = `https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=${qrValue}`;
qrImg.addEventListener("load", () => {
wrapper.classList.add("active");
generateBtn.innerText = "QR Code";
});
});
qrInput.addEventListener("keyup", () => {
if(!qrInput.value.trim()) {
wrapper.classList.remove("active");
preValue = "";
}
});这是style.css的
@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700&display=swap');
*{
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Poppins', sans-serif;
}
body{
display: flex;
padding: 0 10px;
min-height: 100vh;
align-items: center;
background-image: url("ICpEP.jpg");
background-color: #cccccc;
justify-content: center;
}
.wrapper{
height: 650px;
max-width: 410px;
background: #fff;
border-radius: 7px;
padding: 20px 25px 0;
transition: height 0.2s ease;
box-shadow: 0 10px 30px rgba(0,0,0,0.1);
}
.wrapper.active{
height: 650px;
}
header h1{
font-size: 21px;
font-weight: 500;
}
header p{
margin-top: 5px;
color: #575757;
font-size: 16px;
}
.wrapper .form{
margin: 20px 0 25px;
}
.form :where(input, button){
width: 100%;
height: 55px;
border: none;
outline: none;
border-radius: 5px;
transition: 0.1s ease;
}
.form input{
font-size: 18px;
padding: 0 17px;
border: 1px solid #999;
}
.form input :focus{
box-shadow: 0 3px 6px rgba(0,0,0,0.13);
}
.form input::placeholder{
color: #999;
}
.form button{
color: #fff;
cursor: pointer;
margin-top: 20px;
font-size: 17px;
background: #3498DB;
}
.qr-code{
opacity: 0;
display: flex;
padding: 33px 0;
border-radius: 5px;
align-items: center;
pointer-events: none;
justify-content: center;
border: 1px solid #ccc;
}
.wrapper.active .qr-code{
opacity: 1;
pointer-events: auto;
transition: opacity 0.5s 0.05s ease;
}
.qr-code img{
width: 170px;
}
@media (max-width: 430px){
.wrapper{
height: 650px;
padding: 16px 20px;
}
.wrapper.active{
height: 650px;
}
header p{
color: #696969;
}
.form :where(input, button){
height: 52px;
}
.qr-code img{
width: 160px;
} }
发布于 2022-09-23 03:23:54
在这一行:
qrImg.src = `https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=${qrValue}`;您只将qrValue发送到api。如果您希望将id和name信息都编码,则必须将它们读取并发送到api。
话虽如此,我还是会稍微调整一下代码,使其更易于推理。
首先,我将在每个输入元素中添加唯一id,例如:
<input id="name-input" class="form" type="text" spellcheck="false" placeholder="Enter Full Name">
<input id="id-input" class="form" type="text" spellcheck="false" placeholder="Enter ID no.">接下来,我将直接使用以下方法选择这些元素:
var qrNameInput = document.getElementById("name-input");
var qrIdInput = document.getElementById("id-input");然后,在您的事件侦听器中,我将读取以下值:
var name = qrNameInput.value.trim();
var id = qrIdInput.value.trim();最后,将这两个信息发送到api:
qrImg.src = `https://api.qrserver.com/v1/create-qr-code/?size=200x200&data="name:${name},id:${id}"`;发布于 2022-09-23 03:41:44
querySelectorAll()就是这样做的!
但是您必须更改一些代码,因为它返回一个NodeList,因此您必须对结果进行迭代才能找到您的值,如下所示:
const qrInputs = wrapper.querySelectorAll('.form input');
generateBtn.addEventListener('click', () => {
let qrValue = getQrValue();
//[...]
}
function getQrValue() {
//To use array function, you have to cast the NodeList to an Array
const inputsArray = Array.from(qrInputs)
//getting an array of values from inputs
const values = inputsArray.map((input) => input.value);
// return a signle string with all values separated with '_'
return values.join('_');
}
使用qrInput.addEventListener("keyup", [...]),您只需在表单上设置监听器(事件正在冒出来。)。
https://stackoverflow.com/questions/73822489
复制相似问题