首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QR代码生成器只为第一个输入生成QR代码

QR代码生成器只为第一个输入生成QR代码
EN

Stack Overflow用户
提问于 2022-09-23 02:42:44
回答 2查看 31关注 0票数 1

我对堆栈溢出很陌生,我想创建一个QR代码生成器,它将2输入转换成QR代码,但是代码只将第一个输入转换为QR代码,而不包括第二个输入的信息。我也试着使用querySelectorAll,但是它并没有改变我希望好的先生们能很好地教我哪里错了。

以下是HTML的代码

代码语言:javascript
复制
  <!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的代码

代码语言: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的

代码语言:javascript
复制
@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;
  }  

}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-23 03:23:54

在这一行:

代码语言:javascript
复制
qrImg.src = `https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=${qrValue}`;

您只将qrValue发送到api。如果您希望将id和name信息都编码,则必须将它们读取并发送到api。

话虽如此,我还是会稍微调整一下代码,使其更易于推理。

首先,我将在每个输入元素中添加唯一id,例如:

代码语言:javascript
复制
<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.">

接下来,我将直接使用以下方法选择这些元素:

代码语言:javascript
复制
var qrNameInput = document.getElementById("name-input");
var qrIdInput = document.getElementById("id-input");

然后,在您的事件侦听器中,我将读取以下值:

代码语言:javascript
复制
var name = qrNameInput.value.trim();
var id = qrIdInput.value.trim();

最后,将这两个信息发送到api:

代码语言:javascript
复制
qrImg.src = `https://api.qrserver.com/v1/create-qr-code/?size=200x200&data="name:${name},id:${id}"`;
票数 0
EN

Stack Overflow用户

发布于 2022-09-23 03:41:44

querySelectorAll()就是这样做的!

但是您必须更改一些代码,因为它返回一个NodeList,因此您必须对结果进行迭代才能找到您的值,如下所示:

代码语言:javascript
复制
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", [...]),您只需在表单上设置监听器(事件正在冒出来。)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73822489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档