我有一个3类输入框的CSS类,名为.rgb
。在此.rgb
类中有三个输入框,ID为#rgb
,#rgb2
和#rgb3
。
我试图捕获当三个输入框中的任何一个使用.addEventListener
输入文本时,虽然当我按类名选择元素时它不起作用。没有附加innerHTML
以下是此示例的缩小代码:
document.getElementsByClassName('rgb').addEventListener("input", function() {
// Stores the r, g, b values
var r = document.getElementById('rgb').value;
var g = document.getElementById('rgb2').value;
var b = document.getElementById('rgb3').value;
document.getElementById('rgb-output').innerHTML = 'RGB: rgb(' + r + ', ' + g + ', ' + b + ')';
document.getElementById('hex-output').innerHTML = 'HEX: ' + rgbToHEX(r, g, b).toUpperCase();
}, false);
如何修改代码以便它在.rgb
类下的所有三个输入框上侦听输入?
答案 0 :(得分:0)
getElementsByClassName
的结果是节点列表。您无法将事件处理程序附加到节点列表。您必须进入节点列表并将处理程序附加到存储在该节点列表中的各个元素。
var theInputs = document.querySelectorAll('.rgb')
for(var i = 0; i < theInputs.length; ++i){
theInputs[i].addEventListener("input", calc);
}
function calc() {
// Stores the r, g, b values
var r = document.getElementById('rgb').value;
var g = document.getElementById('rgb2').value;
var b = document.getElementById('rgb3').value;
document.getElementById('rgb-output').innerHTML = 'RGB: rgb(' + r + ', ' + g + ', ' + b + ')';
document.getElementById('hex-output').innerHTML = 'HEX: ' + rgbToHEX(r, g, b).toUpperCase();
}
function rgbToHEX(){
return "it works!";
}
&#13;
<input class="rgb" id="rgb">
<input class="rgb" id="rgb2">
<input class="rgb" id="rgb3">
<div id="rgb-output"></div>
<div id="hex-output"></div>
&#13;