为什么email没有填写就提交了但是没有气泡出来呢

来源:4-13 html5默认气泡修改演示

hyperse

2019-09-06 22:24:18

http://img.mukewang.com/climg/5d726b8900015ea106720157.jpg


这是表单什么都没填时点击的效果

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>html5默认气泡修改演示</title>
    <style>
        .oneline{
line-height: 1.5;
margin: 10px auto;
}
.oneline label{
width: 100px;
text-indent: 15px;
font-size: 14px;
font-family: "microsoft yahei";
display: inline-block;
}
.oneline .sinput{
width: 60%;
height: 30px;
border-radius: 6px;
border: 1px solid #e2e2e2;
}
.oneline input[type="submit"]{
margin-left:20px ;
width: 80px;
height: 30px;
border: 0;
background-color: #5899d0;
color: #FFFFFF;
font-size: 14px;
border-radius: 6px;
}
.error-message{
color: red;
font-size: 12px;
text-indent: 108px;
}
    </style>
</head>
<body>
<form id="forms">
<div class="oneline">
<label for="name">用户名:</label>
<input id="name" name="name" class="sinput" required="required" />
</div>
<div class="oneline">
<label for="email">Email:</label>
<input id="email" name="email" class="sinput" type="email" />
</div>
<div class="oneline">
<input type="submit" value="提交" id="thesubmit" />
</div>
</form>
</body>

<script>
function replaceInvalidityUi(form){  //阻止默认气泡
form.addEventListener('invalid',function(event){
event.preventDefault();
},true)
form.addEventListener('submit',function(event){
if(!this.checkValidity()){
event.preventDefault();
}
})
var submitBtn = document.getElementById('thesubmit');
submitBtn.addEventListener('click',function(event){
var inValidityField = form.querySelectorAll(':invalid'), //获取所有不符合验证的信息
errorMessage = form.querySelectorAll('.error-message'), //获取所有的错误信息
parent;
for(var i=0;i<errorMessage.length;i++){  //对错误信息循环并且删掉
errorMessage[i].parentNode.removeChild(errorMessage[i]);
}

for(var i=0;i<inValidityField.length;i++){  //添加新的错误信息
parent = inValidityField[i].parentNode;
parent.insertAdjacentHTML("beforeend","<div class='error-message'>"+ inValidityField[i].validationMessage +"</div>");  //获取错误信息  
}
if(inValidityField.length>0){
inValidityField[0].focus();
}
})
}

var form = document.getElementById('forms');
replaceInvalidityUi(form);
</script>
</html>

而且这里没看明白:

for(var i=0;i<errorMessage.length;i++){  //对错误信息循环并且删掉

errorMessage[i].parentNode.removeChild(errorMessage[i]);

}

如果是在下面几行用insertHTML动态将错误信息加进来的,那前面还没有错误信息,又是如何操作错误信息的呢?代码难道不是按顺序执行咩?

var inValidityField = form.querySelectorAll(':invalid'), //获取所有不符合验证的信息
				errorMessage = form.querySelectorAll('.error-message'), //获取所有的错误信息
				parent;
			for(var i=0;i<errorMessage.length;i++){  //对错误信息循环并且删掉
				errorMessage[i].parentNode.removeChild(errorMessage[i]);
			}
			
			for(var i=0;i<inValidityField.length;i++){  //添加新的错误信息
				parent = inValidityField[i].parentNode;
				parent.insertAdjacentHTML("beforeend","<div class='error-message'>"+ inValidityField[i].validationMessage +"</div>");  //获取错误信息  
			}

老师如果再能把这两个for循环仔细讲讲就好了,谢谢

写回答

1回答

好帮手慕星星

2019-09-07

同学你好,

1、因为视频中做的就是阻止默认气泡,自己来实现错误信息的提示方式啊。第一段代码就是阻止默认气泡显示的:

http://img.mukewang.com/climg/5d7313930001caf105860098.jpg

下面文字是自己设置的错误信息提示位置:

http://img.mukewang.com/climg/5d7313bb00019fc403630140.jpg

2、代码是按照顺序执行的,同学可能不太理解,可以看下面的解释:

第一次点击提交按钮,没有错误信息,就不会执行for循环,后面代码会添加上错误信息。当第二次点击提交按钮,获取错误信息,是第一个点击时候添加的,清除的也是第一次显示的错误信息,然后再添加新的错误信息。这样每次删除都是之前的错误信息,然后再添加新的错误信息,避免错误信息叠加。

3、这两个for循环同学理解的没有问题,也可以参考第二条的回复。第二个for循环可以看一下解释:

http://img.mukewang.com/climg/5d73164d000182ee13750202.jpg

插入位置:

http://img.mukewang.com/climg/5d73166b00012c5e07480476.jpg

自己可以再测试下,祝学习愉快!

0

0 学习 · 6815 问题

查看课程