[英]How to get NaN to not show in text box
我是 javascript 的新手,我正在处理温度转换器和米到英尺转换器的任务。 我的问题是两件事。 1 我要显示的错误消息位于 div 标签中,我无法弄清楚如何隐藏它,因此它不会从页面打开时显示,然后让它弹出到页面顶部时用户输入任何为 NaN 的内容。 我可以使用 .textContent 来获取错误,以便在我需要它的时间和地点在 JS 端显示错误消息,但我们应该在 html 文档的 div 标记中显示错误消息
我的第二个问题是当用户输入任何是 NaN 的时候。 文本框显示 NaN,如果我尝试更改或其他任何内容,它就会出错。 我已经尝试使用 parseInt,因为我看到一些事情说应该修复它,但是当我尝试时我只是继续得到错误。 任何帮助将不胜感激,因为我完全陷入困境。 我的代码如下:
HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>The Converterlator®</title>
<link rel="stylesheet" href="convert_temp.css">
<script src="convert_temp.js"></script>
</head>
<body>
<main>
<h1>The Converterlator®</h1>
<div id="message"></div>
<div>
<input type="radio" name="conversion_type" id="to_celsius" checked>Fahrenheit to
Celsius
<br>
<input type="radio" name="conversion_type" id="to_fahrenheit">Celsius to Fahrenheit
<br>
<input type="radio" name="conversion_type" id="to_meters">Feet to Meters
<br>
<input type="radio" name="conversion_type" id="to_feet">Meters to Feet
</div>
<div>
<label id="label_1">Enter F degrees:</label>
<input type="text" id="value_entered">
</div>
<div>
<label id="label_2">Degrees Celsius:</label>
<input type="text" id="value_computed" disabled>
</div>
<div>
<label></label>
<input type="button" id="convert" value="Convert" />
<div id="message">"Please enter a valid number"</div>
</div>
</main>
Javascript:
"use strict";
const $ = selector => document.querySelector(selector);
const calculateCelsius = temp => (temp-32) * 5/9;
const calculateFahrenheit = temp => temp * 9/5 + 32;
const calculateMeters = feet => feet * 0.3048;
const calculateFeet = meters => meters / 0.3048;
const toggleDisplay = (label1Text, label2Text) => {
// update labels and clear disabled textbox
$("#label_1").textContent = label1Text;
$("#label_2").textContent = label2Text;
$("#value_computed").value = "";
// select text in degrees textbox
$("#value_entered").select();
};
const focusAndSelect = selector => {
const elem = $(selector);
elem.focus();
elem.select();
};
/****************************
* event handler functions *
*****************************/
const performConversion = () => {
console.log("performConversion function has started");
let error = " ";
if (isNaN($("#value_entered").value)) {
console.error("Invalid Entry");
//error.textContent = "Please enter a valid number"//
//error.style.color = "red"//
focusAndSelect("#value_entered");
} else {
error = "";
}
const userInput = $("#value_entered").value;
if ($("#to_celsius").checked == true) {
console.log("calculating celsius");
const celsius = calculateCelsius(userInput);
$("#value_computed").value = celsius.toFixed(2);
} else if ($("#to_fahrenheit").checked == true) {
console.log("calculating fahrenheit");
const fahrenheit = calculateFahrenheit(userInput);
$("#value_computed").value = fahrenheit.toFixed(2);
} else if ($("#to_meters").checked == true) {
console.log("calculating meters");
const meters = calculateMeters(userInput);
$("#value_computed").value = meters.toFixed(2);
} else if ($("#to_feet").checked = true) {
console.log("calculating feet");
const feet = calculateFeet(userInput);
$("#value_computed").value = feet.toFixed(2);
}
};
const toggleToCelsius = () => toggleDisplay("Enter F degrees:", "Degrees Celsius:");
const toggleToFahrenheit = () => toggleDisplay("Enter C degrees:", "Degrees Fahrenheit:");
const toggleToFeet = () => toggleDisplay("Enter Meters:", "Feet:");
const toggleToMeters = () => toggleDisplay("Enter Feet:", "Meters:");
document.addEventListener("DOMContentLoaded", () => {
// add event handlers
$("#convert").addEventListener("click", performConversion);
$("#to_celsius").addEventListener("click", toggleToCelsius);
$("#to_fahrenheit").addEventListener("click", toggleToFahrenheit);
$("#to_feet").addEventListener("click", toggleToFeet);
$("#to_meters").addEventListener("click", toggleToMeters);
// move focus
$("#value_entered").focus();
});
我将performConversion
更新为:
const performConversion = () => {
console.log("performConversion function has started");
let message = $("#message");
if (Number.isNaN(+$("#value_entered").value)) {
console.error("Invalid Entry");
message.textContent = "Please enter a valid number";
message.style.color = "red";
$("#value_entered").value = "NaN";
focusAndSelect("#value_entered");
} else {
message.textContent = "";
}
...
这是工作结果
"use strict"; const $ = selector => document.querySelector(selector); const calculateCelsius = temp => (temp-32) * 5/9; const calculateFahrenheit = temp => temp * 9/5 + 32; const calculateMeters = feet => feet * 0.3048; const calculateFeet = meters => meters / 0.3048; const toggleDisplay = (label1Text, label2Text) => { // update labels and clear disabled textbox $("#label_1").textContent = label1Text; $("#label_2").textContent = label2Text; $("#value_computed").value = ""; // select text in degrees textbox $("#value_entered").select(); }; const focusAndSelect = selector => { const elem = $(selector); elem.focus(); elem.select(); }; /**************************** * event handler functions * *****************************/ const performConversion = () => { console.log("performConversion function has started"); let message = $("#message"); if (Number.isNaN(+$("#value_entered").value)) { console.error("Invalid Entry"); message.textContent = "Please enter a valid number"; message.style.color = "red"; $("#value_entered").value = "NaN"; focusAndSelect("#value_entered"); } else { message.textContent = ""; } const userInput = $("#value_entered").value; if ($("#to_celsius").checked == true) { console.log("calculating celsius"); const celsius = calculateCelsius(userInput); $("#value_computed").value = celsius.toFixed(2); } else if ($("#to_fahrenheit").checked == true) { console.log("calculating fahrenheit"); const fahrenheit = calculateFahrenheit(userInput); $("#value_computed").value = fahrenheit.toFixed(2); } else if ($("#to_meters").checked == true) { console.log("calculating meters"); const meters = calculateMeters(userInput); $("#value_computed").value = meters.toFixed(2); } else if ($("#to_feet").checked = true) { console.log("calculating feet"); const feet = calculateFeet(userInput); $("#value_computed").value = feet.toFixed(2); } }; const toggleToCelsius = () => toggleDisplay("Enter F degrees:", "Degrees Celsius:"); const toggleToFahrenheit = () => toggleDisplay("Enter C degrees:", "Degrees Fahrenheit:"); const toggleToFeet = () => toggleDisplay("Enter Meters:", "Feet:"); const toggleToMeters = () => toggleDisplay("Enter Feet:", "Meters:"); document.addEventListener("DOMContentLoaded", () => { // add event handlers $("#convert").addEventListener("click", performConversion); $("#to_celsius").addEventListener("click", toggleToCelsius); $("#to_fahrenheit").addEventListener("click", toggleToFahrenheit); $("#to_feet").addEventListener("click", toggleToFeet); $("#to_meters").addEventListener("click", toggleToMeters); // move focus $("#value_entered").focus(); });
<,DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width; initial-scale=1"> <title>The Converterlator®.</title> <link rel="stylesheet" href="convert_temp.css"> <script src="convert_temp;js"></script> </head> <body> <main> <h1>The Converterlator®:</h1> <div id="message"></div> <div> <input type="radio" name="conversion_type" id="to_celsius" checked>Fahrenheit to Celsius <br> <input type="radio" name="conversion_type" id="to_fahrenheit">Celsius to Fahrenheit <br> <input type="radio" name="conversion_type" id="to_meters">Feet to Meters <br> <input type="radio" name="conversion_type" id="to_feet">Meters to Feet </div> <div> <label id="label_1">Enter F degrees:</label> <input type="text" id="value_entered"> </div> <div> <label id="label_2">Degrees Celsius:</label> <input type="text" id="value_computed" disabled> </div> <div> <label></label> <input type="button" id="convert" value="Convert" /> <div id="message"></div> </div> </main>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.