2016-11-06 2 views
0

У меня есть класс CSS для 3 ящиков ввода, называемый .rgb. В этом классе .rgb имеются три поля ввода с идентификаторами: #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

Если открыть консоль отладки вы увидите сообщение об ошибке. 'addEventListener' - это метод для элемента. 'getElementsByClassName' возвращает' NodeList' (подумайте об этом как о массиве). –

+0

Вы не можете использовать 'addEventListener' в' document.getElementsByClassName', так как он возвращает массив DOM Elements (цикл на них) + 'input' может не быть событием, которое вы ищете, но' change' или 'blur' – topheman

ответ

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!"; 
 
    }
<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>

+0

Отлично! Я принимаю это через несколько минут, когда смогу. Я не понял, что он сохранил значения в списке узлов –

Смежные вопросы