javascript - 如何从选定的输入字段中获取值(不使用 id)
问题描述
我尝试编写简单的代码来通过耳朵猜测音符。我有几个空输入字段的选项卡,您需要根据某些旋律在这些字段中输入正确的数字(对于吉他指板)。一个按钮显示第一个注释,另一个按钮检查您是否输入了正确或错误的号码,并根据它批准或删除您的号码。
我知道如何使用其 id 检查每个输入字段,但是我可以这样做,当我按下第二个按钮时,它会从选定的输入中获取值并将其与其占位符或值属性进行比较?
这是我的 codepen https://codepen.io/fukenist/pen/BxJRwW 脚本部分
function showfirst() {
document.getElementById("fst").value = "12"
}
function show1other() {
var snote = document.getElementById("scnd").value;
if (snote == 9 ){
document.getElementById("scnd").value = "9";
}
else {
document.getElementById("scnd").value = "";
}
}
解决方案
您可以使用document.querySelectorAll()
来获取所有输入并循环它们。
样本:
// Get all inputs as an array (actually NodeList, to be precise; but it behaves similar to an array for this use case)
var inputs = document.querySelectorAll('input');
// Function to reveal the first input's value
function showFirst(){
inputs[0].value = inputs[0].dataset.v;
}
// Function to check all values and clear input if wrong
function checkAll(){
inputs.forEach(function(input){
if(input.dataset.v !== input.value){
// Wrong answer, clear input
input.value = '';
}
});
}
<input data-v="12" size="2" value=""/>
<input data-v="9" size="2" value=""/>
<input data-v="8" size="2" value=""/>
<br/>
<button onclick="showFirst()">Show First</button>
<button onclick="checkAll()">Check All</button>
笔记:
- 我曾经
data-v
存储正确的答案,而不是placeholder
因为该属性在语义上具有不同的含义 - 这可能不合时宜,但我的两分钱:像这样手工写出整首歌曲可能会变得乏味。考虑使用 JSON 字符串或类似的东西来映射选项卡并使用模板框架来对齐它们。在设计这样的东西时可能需要注意一些事情:音符对齐(连续音符,同时音符),时间歌曲的特殊动作,如滑动,锤击等。
- 将吉他弦作为背景元素(作为背景图像或作为绝对定位的重叠 div)可能是一个更好的主意(因此您不必担心线条不对齐)
参考:
推荐阅读
- node.js - 除我的本地开发机器外,所有设备上的 Google OAuth 客户端授权错误
- ruby-on-rails - 使用 yarn 推送到 Heroku Rails 应用程序时出现预编译错误
- svelte - 如何将 Svelte 存储与树状嵌套对象一起使用?
- node.js - 将多个值插入 PostreSQL - pg
- python - 从 python 中的 datetime.date 对象获取上一年
- javascript - 一些测试用例没有运行 - 我错过了什么?
- node.js - VSCode 为 WorkSpace 中的每个项目设置不同的主题设置
- javascript - 如何使用 joi 中间件执行 OR 语句并处理错误?
- react-router-dom - react-router-dom:如何在 url 中使用正则表达式捕获组创建路由并在组件中获取它们
- javascript - vue3 chart-js 在悬停时显示以前的数据