<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<div class="basic">
<form id="input">
<p id="content">
<label> Birth Year: <input type="text" id="box1" placeholder="E.g. 1020" ></label> <br></br>
<!-- oninvalid="this.setCustomValidity('Please enter a number.')" -->
<label> Current Year: <input type="text" id="box2" placeholder="E.g. 1220" ></label> <br></br>
<input type="button" value="Calculate" id="submit" onclick="calculateAge(document.getElementById('box1').value, document.getElementById('box2'.value))"/>
</p>
</form>
</div>
<script type="text/javascript">
//previous attempt at form validation and bubble error message.
//error message for form fields
var birth = document.getElementById('box1');
birth.oninvalid = function(event)
{
event.target.setCustomValidity('Please enter a number.');
}
var current = document.getElementById('box2');
current.oninvalid = function(e)
{
e.target.setCustomValidity('Please enter a number.');
}
//function parameters do not have types?
function calculateAge(birthYear, currentYear)
{
var a = birthYear.match("^[0-9]+$").length == 1;
var b = currentYear.match("^[0-9]+$").length == 1;
//var check1 = Number.isInteger(birthYear);
//var check2 = Number.isInteger(currentYear);
var page = document.getElementById("content");
// fire off an error message if one of the two fields is NaN.
if (a ==true && b==true)
{
//var page = document.getElementById("content");
var content = page.innerHTML;
var age = currentYear-birthYear;
var stage;
if (age <18)
{
stage = "Teenager";
}
else if (age >= 18 || age <= 35)
{
stage = "Adult";
}
else
{
stage = "Mature Adult";
}
// \n not working at all...why?
var outputMessage = "Your stage is: " + stage + ".\n" + "Your age is: " + age + "." + '\n';
var node = document.createTextNode(outputMessage);
page.insertBefore(node, page.firstChild);
}
else
{
var outputMessage = "Error: please enter a number.";
var node = document.createTextNode(outputMessage);
page.insertBefore(node, page.firstChild);
}
}
var button = document.getElementById("submit");
button.onclick = function()
{
value1 = button.form.box1.value;
value2 = button.form.box2.value;
calculateAge(value1, value2);
}
</script>
</body>
</html>
我试着“采用”一些示例代码进行表单验证,我的代码拒绝给我一个说“错误输入!”的东西的小泡泡。就像文档中的示例代码一样,所以我决定采用更简单的方法。表单验证()
我的目标是检查表单域的输入是否是数字(没有字母/符号),所以即时做一个if检查以做我想要的表单结果(输出该人的阶段/年龄给他们的信息),否则我只是想让它发出一个通用的错误消息。
但是,即使“年龄”输出为“NaN”,也不会触发错误消息。例如在box1中填入一个字母,在box2中填入一个数字,就可以得到阶段:(空白)年龄:NaN。我错过了什么?
编辑:实施建议更改,如果检查条件发生更改。
用户输入将是一个字符串,所以可能使用'inputValue.match( “^ [0-9] + $”)长度== 1'会更好;) –
@KoalaGangsta谢谢你,那就是我一直在寻找的。 – ShadowBlade
@KoalaGangsta嗯,现在它把所有东西看作不是一个整数,只会抛出错误。 – ShadowBlade