javascript - 如何确保用户输入的数据是 JavaScript 中的特定数据类型?
问题描述
我一直在研究 JavaScript 中的一些基本表单验证。目前,我有一个简单的 HTML 表单,它有三个输入字段——两个需要数字输入,一个需要字符串输入。但是,我正在努力实现这一点。
const displayMessage = function (message) {
document.querySelector(".message").textContent = message;
};
const displayOtherMessage = function (message) {
document.querySelector(".message1").textContent = message;
};
document.querySelector(".check").addEventListener("click", function () {
const height = Number(document.querySelector(".height").value);
const weight = Number(document.querySelector(".weight").value);
const name = String(document.querySelector(".name").value);
if (!height && !weight && !name) {
displayMessage("Please enter a height, a weight and a name.");
} else if (!height || !weight || !name) {
displayMessage("Please enter a height, a weight and a name.");
} else if (height && weight && name) {
if (
typeof weight !== "number" ||
typeof height !== "number" ||
typeof name !== "string"
) {
displayOtherMessage(
"Height must be a number, weight must be a number and name must be a string."
);
}
displayMessage("");
alert(
`Thank you, ${name}! You said you weigh ${weight} kilograms and are ${height} metres tall.`
);
}
});
这是我正在努力解决的问题:
if (
typeof weight !== "number" ||
typeof height !== "number" ||
typeof name !== "string"
) {
displayOtherMessage(
"Height must be a number, weight must be a number and name must be a string."
);
}
当我尝试在第二个输入字段中提交“John”时,会显示 displayMessage。如何使 displayOtherMessage 改为显示?
这里的 HTML:
解决方案
您的代码在检查中有点多余。例如,一个<input>
值总是一个字符串,所以不需要检查它的类型,只要它不为空。此外,您应该更具体地说明您需要用户做什么(哪个输入不正确)。您可以将其简化为如下所示:
const displayMessage = function (message) {
document.querySelector(".message").textContent = message;
};
document.querySelector(".check").addEventListener("click", function () {
let height = document.querySelector(".height").value,
name = document.querySelector(".name").value,
weight = document.querySelector(".weight").value;
if (!name) {
displayMessage("Please enter a name.");
} else if (!height || isNaN(Number(height))) {
displayMessage("Height must be a number.");
} else if (!weight || isNaN(Number(weight))) {
displayMessage("Weight must be a number.");
} else {
displayMessage(`Thank you, ${name}! You said you weigh ${weight} kilograms and are ${height} metres tall.`
);
}
});
https://jsfiddle.net/1L5qjg2o/3/
此外,请考虑keyup
在您的输入上使用事件来执行这些检查。在我看来,如果您在用户输入它们时进行验证和更正,而不是等到他们提交所有内容然后不得不倒退,那么用户体验会好得多。
推荐阅读
- linux - 从“dd”恢复备份(softRAID HDD 可能有问题)
- ruby-on-rails - Sidekiq 在使用多个队列时忽略并发性
- pandas - 将具有远期日期的 CSV 解析为 Parquet
- javascript - Javascript构建动态多维数组
- html - 框转换不会响应 :hover
- arrays - React Native - 无法从 json 文件中的 Array 中访问 Array 中的数据
- javascript - 有条件地渲染属性对象值?
- android - Android的DisplayMetrics的heightpixels是否考虑了状态栏和软导航栏?
- c++ - 计算具有限制的唯一排列的有效方法
- c# - C# 正则表达式在 HTML 中查找短语排除特定标签