为什么email没有填写就提交了但是没有气泡出来呢
来源:4-13 html5默认气泡修改演示
hyperse
2019-09-06 22:24:18
这是表单什么都没填时点击的效果
<!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、因为视频中做的就是阻止默认气泡,自己来实现错误信息的提示方式啊。第一段代码就是阻止默认气泡显示的:
下面文字是自己设置的错误信息提示位置:
2、代码是按照顺序执行的,同学可能不太理解,可以看下面的解释:
第一次点击提交按钮,没有错误信息,就不会执行for循环,后面代码会添加上错误信息。当第二次点击提交按钮,获取错误信息,是第一个点击时候添加的,清除的也是第一次显示的错误信息,然后再添加新的错误信息。这样每次删除都是之前的错误信息,然后再添加新的错误信息,避免错误信息叠加。
3、这两个for循环同学理解的没有问题,也可以参考第二条的回复。第二个for循环可以看一下解释:
插入位置:
自己可以再测试下,祝学习愉快!
相似问题
回答 1
回答 2