所以我创建了这个非常简单的年龄门,当用户小于 18 岁时,他们会在"验证年龄"按钮底部收到一条错误消息"重试"。一切正常,但是当"重试"消息显示它只是闪烁,显示一秒钟并消失时。 我希望它保持可见,直到用户单击其中一个输入框。 我做错了什么? 如果在年份输入框中输入 2010,则可以看到"重试"消息闪烁。
<html>
<head>
<link href='https://fonts.googleapis.com/css?family=Oswald:400,700' rel='stylesheet' type='text/css'>
<style>
body{
width: 100%;
padding: 0;
margin: 0;
}
#ageGateWrapper{
background: rgba(0,0,0,0.75);
text-align: center;
width: 512px;
height: 288px;
border: 2px solid #d5882c;
}
#innerWrapper{
position: relative;
top: 10%;
}
h1{
position: relative;
font-size: 24px;
font-family: 'Oswald', sans-serif;
font-weight: 400;
color: #ffffff;
padding-bottom: 10px;
letter-spacing: 5px;
}
#ageGateWrapper ul{
list-style: none;
margin: 0 auto;
padding: 0;
}
#ageGateWrapper ul li{
display: inline-block;
}
input {
padding: 10px;
width: 100%;
font-size: 16px;
font-family: 'Oswald', sans-serif;
font-weight: 400;
letter-spacing: 2px;
color: #ffffff;
border: 2px solid #d5882c;
background-color: #000000;
width: 80px;
height: 50px;
text-align: center;
margin-right: 10px;
}
#submit {
position: relative;
top: 15px;
text-align: center;
margin: 0 auto;
color: #ffffff;
font-size: 16;
font-family: 'Oswald', sans-serif;
font-weight: 400;
letter-spacing: 2px;
width: 135px;
height: 60px;
margin: 0;
padding: 0;
background: #000000;
border: 2px solid #d5882c;
}
#errorDiv{
position: relative;
display: none;
top:25px;
font-size: 16;
font-family: 'Oswald', sans-serif;
font-weight: 400;
color: #ffffff;
}
</style>
<script language="javascript">
function age(){
var validated = false;
var minimumAge = 18;
var minYear;
var bday=parseInt(document.forms[0].txtBday.value);
var bmo=(parseInt(document.forms[0].txtBmo.value)+1);
var byr=parseInt(document.forms[0].txtByr.value);
//var byr;
var age;
var now = new Date();
currentDay=now.getDate();
currentMo=(now.getMonth()+1);
currentYr=(now.getFullYear());
console.log("tday " + currentDay);
console.log("tmo " + currentMo);
console.log("tyr " + currentYr);
minYear = currentYr - minimumAge;
if(byr > minYear){
failed();
}
if(byr >= minYear){
if(bmo == currentMo){
if(bday >= currentDay){
//alert("PASS");
passed();
}
}else if(bmo < currentMo){
failed();
}else if(bmo > currentMo){
//alert("PASS 2");
passed();
}
}
}
function passed(){
alert("SHOW CONTENT");
window.parent.postMessage("teaser ended", '*');
}
function failed(){
document.getElementById("errorDiv").style.display= "block";
}
</script>
</head>
<body>
<div id="ageGateWrapper">
<div id="innerWrapper">
<h1> ENTER YOUR DATE OF BIRTH</h1>
<form>
<ul>
<li><div> <input type="text" name="txtBmo" placeholder="MM"> </div></li>
<li><div> <input type="text" name="txtBday" size="4" placeholder="DD"> </div></li>
<li><div> <input type="text" name="txtByr"size="4" placeholder="YYYY"> </div></li>
<ul>
<input type="submit" value="VERIFY AGE" onClick="age()" id="submit">
<div id="errorDiv">Try Again </di>
<form>
</div>
</div>
</body>
</html>
您应该通过提供事件参数并对其应用 preventDefault()
方法来阻止表单提交:
.html
<input type="submit" value="VERIFY AGE" onClick="age(event)" id="submit">
JavaScript
function age(event){
event.preventDefault();
var validated = false;
...
}
"重试"闪烁,因为您已将"验证年龄"按钮设置为"提交"类型。每次单击"验证期限"时,浏览器都会将其解释为向服务器提交表单,导致服务器刷新并重置 DOM。 将其更改为"按钮"通常可以解决此问题。
<form>
<ul>
<li><div> <input type="text" name="txtBmo" placeholder="MM"> </div></li>
<li><div> <input type="text" name="txtBday" size="4" placeholder="DD"> </div></li>
<li><div> <input type="text" name="txtByr"size="4" placeholder="YYYY"> </div></li>
<ul>
<input type="button" value="VERIFY AGE" onClick="age()" id="submit">//BUTTON TYPE
<div id="errorDiv">Try Again </di>
<form>
尝试更正 HTML 代码中的错误。
1) 关闭ul
2) 关闭form
3)也纠正错误div的div
关闭器。它目前是"
试一试。