JavaScript Programming/Dynamic HTML/Example Code
example.html
edit<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="Cache-Control" content="no-cache">
<title>Example</title>
<style>
body {
font-family: Arial, Helvetica, sans-serif;
}
input {
width: 3em;
margin: 0em 1em 0em 0.5em;
}
#error {
font-weight: bold;
margin: 0.5em;
}
table {
border: thin solid gray;
border-collapse: collapse;
margin: 1em;
}
th, td {
border: thin solid gray;
padding: 0.25em;
text-align: center;
}
</style>
<script defer src="example.js"></script>
</head>
<body>
<noscript>Enable JavaScript to see web page content.</noscript>
<h1>Temperature Conversion Table</h1>
<p>
<label for="start">Start:</label><input id="start"></input>
<label for="stop">Stop:</label><input id="stop"></input>
<label for="step">Step:</label><input id="step"></input></p>
<p><label id="error"></label></p>
<hr>
<table>
<thead>
<tr>
<th>Fahrenheit</th>
<th>Celsius</th>
</tr>
</thead>
<tbody id="tbody">
</tbody>
</table>
</body>
</html>
example.js
edit// This program displays a temperature conversion chart and demonstrates
// JavaScript loops.
//
// References:
// https://www.mathsisfun.com/temperature-conversion.html
// https://en.wikibooks.org/wiki/JavaScript
"use strict";
const TEMPERATURE_DIFFERENCE = 32;
const TEMPERATURE_RATIO = 5 / 9;
window.addEventListener("load", function () {
let elements = document.getElementsByTagName("input");
for (let i = 0; i < elements.length; i++) {
elements[i].addEventListener("focus", inputFocus);
elements[i].addEventListener("input", inputInput);
}
document.getElementById("start").focus();
});
function inputFocus() {
document.activeElement.select();
document.getElementById("error").innerText =
"Enter " + document.activeElement.id + " value.";
}
function inputInput() {
let value = document.activeElement.value;
if (checkInput()) {
document.getElementById("error").innerText = "";
let table = createTable();
if (table != null) {
displayTable(table);
}
}
}
function checkInput() {
let value = document.activeElement.value;
if (isNaN(value) || value.trim().length == 0) {
document.getElementById("error").innerText =
document.activeElement.id + " must be a number!";
return false;
}
let elements = document.getElementsByTagName("input");
for (let i = 0; i < elements.length; i++) {
value = elements[i].value;
if (isNaN(value) || value.trim().length == 0) {
return false;
}
}
return true;
}
function createTable() {
let start = Number(document.getElementById("start").value);
let stop = Number(document.getElementById("stop").value);
let step = Number(document.getElementById("step").value);
if (stop < start) {
document.getElementById("error").innerText = "Stop must be greater than or equal to start!"
document.getElementById("tbody").innerText = "";
return;
}
if (step <= 0) {
document.getElementById("error").innerText = "Step must be greater than or equal to 0!"
document.getElementById("tbody").innerText = "";
return;
}
let table = [];
for (let fahrenheit = start; fahrenheit <= stop; fahrenheit += step) {
let element = [];
let celsius = fahrenheitToCelsius(fahrenheit);
element[0] = fahrenheit;
element[1] = celsius;
table.push(element);
}
return table;
}
function displayTable(table) {
let tbody = document.getElementById("tbody");
while (tbody.lastChild) {
tbody.removeChild(tbody.lastChild);
}
for (let row = 0; row < table.length; row++) {
let tr = document.createElement("tr");
let td = document.createElement("td");
td.innerText = table[row][0].toFixed(1);
tr.appendChild(td);
td = document.createElement("td");
td.innerText = table[row][1].toFixed(1);
tr.appendChild(td);
tbody.appendChild(tr);
}
}
function fahrenheitToCelsius(fahrenheit) {
let celsius = (fahrenheit - TEMPERATURE_DIFFERENCE) * TEMPERATURE_RATIO;
return celsius;
}