From 9e5950490a7d87b9fdc356439591a2e6cb206c14 Mon Sep 17 00:00:00 2001 From: OkunElya Date: Thu, 1 Jan 2026 14:04:53 +1000 Subject: [PATCH] values checking added --- hw/hw7/hw7.js | 134 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 101 insertions(+), 33 deletions(-) diff --git a/hw/hw7/hw7.js b/hw/hw7/hw7.js index 341b0cd..8897390 100644 --- a/hw/hw7/hw7.js +++ b/hw/hw7/hw7.js @@ -141,7 +141,7 @@ function updateCalculateButton() { else { ret = inputsB["l"] !== null && inputsB["angle"] !== null } - ret &= elements.outputR.checked || elements.outputH.checked ||elements.outputL.checked; + ret &= elements.outputR.checked || elements.outputH.checked || elements.outputL.checked; elements.calculateButton.disabled = !ret; } @@ -209,6 +209,30 @@ function clearInputs() { } elements.outputsTable.classList.add("hidden"); } +function checkAngle(angleString) { + let angle = parseFloat(angleString); + if (isNaN(angle)) { + return "Введите корректное число"; + } + if (angle <= 0) { + return "Угол должен быть больше 0"; + } + if (angle >= 180) { + return "Угол должен быть меньше 180"; + } + return ""; +} + +function checkLength(lengthString) { + let length = parseFloat(lengthString); + if (!isFinite(length)) { + return "Введите корректное число"; + } + if (length <= 0) { + return "Длина должна быть больше 0"; + } + return ""; +} elements.outputsFieldset.addEventListener('change', function (event) { if (event.target.type === 'checkbox') { @@ -216,41 +240,85 @@ elements.outputsFieldset.addEventListener('change', function (event) { } }); -elements.inputsForm.addEventListener('change', function (event) { - if (event.target.type === 'radio') { - if (event.target.id[event.target.id.length - 1].toLowerCase() == "a") { - currentModeIsA = true; - switchAppearance(true); - console.log("Switching inputs to A"); - } - else { - currentModeIsA = false - switchAppearance(false); - console.log("Switching inputs to B"); +elements.inputsForm.addEventListener('change', handleInputEvent); +elements.inputsForm.addEventListener('input', handleInputEvent); - } - } else if (event.target.type === 'number') { - switch (event.target.id) { - case "equalSideLength": - inputsA.l = parseFloat(event.target.value) || 0; - break; - case "baseAngle": - inputsA.angle = parseFloat(event.target.value) || 0; - break; - case "baseSideLength": - inputsB.l = parseFloat(event.target.value) || 0; - break; - case "baseAdjacentAngle": - inputsB.angle = parseFloat(event.target.value) || 0; - break; - default: - console.log(event.target.id) - break; - } - updateCalculateButton(); +function handleSwitchInputs(event) { + if (event.target.id[event.target.id.length - 1].toLowerCase() == "a") { + currentModeIsA = true; + switchAppearance(true); + console.log("Switching inputs to A"); + } + else { + currentModeIsA = false + switchAppearance(false); + console.log("Switching inputs to B"); } -}); +} + +function HandleInputsUpdate(event) { + switch (event.target.id) { + case "equalSideLength": + { + const err = checkLength(event.target.value); + setErrTooltip(0, err); + if (err === "") { + inputsA.l = parseFloat(event.target.value); + } else { + inputsA.l = null; + } + } + break; + case "baseAngle": + { + const err = checkAngle(event.target.value); + setErrTooltip(1, err); + if (err === "") { + inputsA.angle = parseFloat(event.target.value); + } else { + inputsA.angle = null; + } + } + break; + case "baseSideLength": + { + const err = checkLength(event.target.value); + setErrTooltip(2, err); + if (err === "") { + inputsB.l = parseFloat(event.target.value); + } else { + inputsB.l = null; + } + } + break; + case "baseAdjacentAngle": + { + const err = checkAngle(event.target.value); + setErrTooltip(3, err); + if (err === "") { + inputsB.angle = parseFloat(event.target.value); + } else { + inputsB.angle = null; + } + } + break; + default: + console.log(event.target.id) + break; + } + updateCalculateButton(); + +} + +function handleInputEvent(event) { + if (event.target.type === 'radio') { + handleSwitchInputs(event); + } else if (event.target.type === 'number') { + HandleInputsUpdate(event); + } +} + elements.clearButton.addEventListener('click', (event) => { event.preventDefault();