javascript - 使用 querySelectorAll 动态更改输入值
问题描述
我有多个颜色输入(总共 16 个),我通过使用 adiv
作为包装器来设置它们的样式。包装器 divcolor-wrapper
本质上是我的颜色输入。
<ul class="color-picker__list">
<li>
<div class="color-wrapper">
<input id="highlight-background" type="color" value="#F7EBC6">
<label for="highlight-background">Highlight Background</label>
</div>
</li>
<li>
<div class="color-wrapper">
<input id="highlight-accent" type="color" value="#F7D87C">
<label for="highlight-accent">Highlight Accent</label>
</div>
</li>
</ul>
预期目标
每个包装器div
都应将其背景颜色设置为其包装的颜色输入的值。更改输入时,背景颜色应更改为所选颜色。
当前的意外结果
每个颜色输入当前都是黑色的,初始值为#00000
。当我改变颜色时,什么也没有发生。
我尝试过的
我抓住了所有输入和color-wrapper
's 并使用嵌套循环它们,forEach
以便我可以迭代两者并将背景颜色设置为color-wrapper
颜色输入的值。
const colorWrappers = [].slice.call(document.querySelectorAll('.color-wrapper'))
const inputs = [].slice.call(document.querySelectorAll('input[type="color"]'))
colorWrappers.forEach(wrapper => {
inputs.forEach(input => {
wrapper.style.backgroundColor = input.value
})
})
我只在使用 选择单个颜色时才成功querySelector
,但我需要能够动态更改所有 16 种颜色输入。
输入和包装 CSS
input[type="color"] {
opacity: 0;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.color-wrapper {
display: flex;
height: 35px;
max-width: 50px;
border-radius: 3px;
position: relative;
height: 30px;
width: 30px;
display: inline-block;
vertical-align: middle;
margin-right: 10px;
}
解决方案
这对我有用:
获取所有输入元素,循环它们,将更改事件添加到每个元素,并将其颜色设置为他的父元素。
Javascript:
var inputs = document.querySelectorAll('.color-wrapper input');
inputs.forEach(function(element){
element.addEventListener("change", function () {
element.parentNode.style.background = element.value;
});
})
推荐阅读
- c# - 使用 CRUD 功能的存储过程的 ASP.NET MVC EF Core 问题
- swift - @ObservedObject 更改未在异步操作后反映
- java - 在其他类控制器中使用另一个类存储库是正确的方式或使用 RestTemplate 类调用 api 是正确的方式
- javascript - react-native ,客户平面列表选择器,在选择时返回以前的值
- php - 使用 curl 在 postfields 中上传带有文件 @ 的 POST 数据
- node.js - Nodejs ssl3_get_record 版本号错误
- javascript - 为什么简单的 javascript 导入不起作用?
- python - 获取模块的导入名称
- javascript - 在 VueJS 中动态添加选择字段和验证
- algorithm - 给定一个公式,求解一个未知变量