I am currently trying to implement a paint feature in my pixel art program but the issue I am having is when I add an eventListener to the element I want to paint nothing happens. I checked tests in the console and changed the elements color in CSS and it successfully changed color. I show my code issue lower down the page of the JavaScript Code:
JavaScript
document.addEventListener('submit', function(event) {
const height = document.querySelector('#inputHeight').value;
const width = document.querySelector('#inputWidth').value;
// cause the 'submit' to not reset page
event.preventDefault();
// When size is submitted by the user, call makeGrid()
makeGrid(height, width);
});
function makeGrid(wid, hi) {
// Clear the canvas after every 'submit' event
let pixelNode = document.querySelector('#pixelCanvas');
while (pixelNode.firstChild) {
pixelNode.removeChild(pixelNode.firstChild);
}
// Select size input
let shelfWidth = "";
for (let i = 0; i < wid; i++) {
shelfWidth += '<td></td>';
}
let row = document.querySelector('#pixelCanvas');
const HTMLToAdd = '<tr>' + shelfWidth + '</tr>';
for (let j = 0; j < hi; j++) {
row.insertAdjacentHTML('afterbegin', HTMLToAdd);
}
}
Here is my issue I see nothing wrong with my code and I dont know why this wouldn't assign each element with the color the user chooses. The variable 'color' is a string that I am concatenating to the rest of the CSSText.
// Select color input
document.querySelector('td').addEventListener('click', function() {
// collect color value from picker to pass into paint funtion
const color = document.querySelector('#colorPicker').value;
document.querySelector('td').style.CSSText = ('background-color: ' + color);
});
HTML
<!DOCTYPE html>
<html>
<head>
<title>Pixel Art Maker!</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Monoton">
<link rel="stylesheet" href="styles.css">
</head>
<body>
<h1>Lab: Pixel Art Maker</h1>
<h2>Choose Grid Size</h2>
<form id="sizePicker">
Grid Height:
<input type="number" id="inputHeight" name="height" min="1" value="4">
<br>
Grid Width:
<input type="number" id="inputWidth" name="width" min="1" value="4">
<br>
<br>
<input type="submit">
</form>
<h2>Pick A Color</h2>
<input type="color" id="colorPicker">
<h2>Design Canvas</h2>
<table id="pixelCanvas">
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
<script src="designs.js"></script>
</body>
</html>
.CSSTextto.cssText- JavaScript is case sensitive