JavaScript -添加eventListener到所有类型范围的输入



我尝试实现一种功能,即类型为range的input-Elements总是将其值解析为位于范围之后的span元素。

控制台没有输出任何问题,是否可能,我不能在

中定义输入的类型?

<div class="rowitem rowinput w100">
<label for="person">Units</label>
<input type="range" id="units" name="units" min="1" max="30" value="1" step="1" />
<div class="range_sel_cont">
<span class="range_sel">1</span>
Units
<div>
</div>

JS(香草)

let ranges = document.getElementsByTagName('input[type=range]');
for (var i = 0 ; i < ranges.length; i++) {
ranges.addEventListener ("change", function () {
let show = this.closest('.range_sel');
show.innerHTML = this.value;
});
};

几点:

  • 您应该将事件侦听器添加到ranges中索引i的项目,而不是ranges本身(这是一个HTMLCollection)

  • closest()获得与选择器匹配的最接近的父元素。您试图在事件侦听器中选择的元素是同级元素的子元素。您可以通过获取输入的nextElementSibling来选择它。

  • 没有标签为input[type=range]的元素。如果你想获得所有与选择器匹配的元素,使用querySelectorAll

let ranges = document.querySelectorAll('input[type=range]');
for (var i = 0; i < ranges.length; i++) {
ranges[i].addEventListener("change", function() {
let show = this.nextElementSibling.querySelector('.range_sel');
show.innerHTML = this.value;
});
};
<div class="rowitem rowinput w100">
<label for="person">Units</label>
<input type="range" id="units" name="units" min="1" max="30" value="1" step="1" />
<div class="range_sel_cont">
<span class="range_sel">1</span> Units
<div>
</div>

最新更新