3-10作业,最后“下一步”按钮触发事件为什么响应失败。好像重新刷新一样
来源:3-10 作业题
敲着敲着
2019-11-12 20:34:07
//获取元素的
var ele={
myImooc:document.querySelector(".myImooc"),
imooc_list:document.getElementById("imooc_list"),
user:document.getElementById("user"),
userpass:document.getElementById("userpass"),
confirm:document.getElementById("confirm"),
chinaname:document.getElementById("chinaname"),
cert:document.getElementById("cert"),
id_number:document.getElementById("id_number"),
email:document.getElementById("email"),
phonenumber:document.getElementById("phonenumber"),
passengers:document.getElementById("passengers"),
read:document.getElementById("read"),
next:document.getElementById("next"),
prompt:document.querySelectorAll(".prompt"),//表单检验提示节点
pass_val:document.querySelector(".pass_val"),//密码验证节点
nameset:document.querySelector(".nameset"),
nameset_text:document.querySelector(".nameset_text")
}
//正则集合对象
var formRegexp={
user:/^[a-z]\w{5,29}$/i,
userpass1:/^[a-z]{6,20}$|[0-9]{6,20}$|[~!@#$%&*+?-_]{6,20}$/i,
userpass2:/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{6,20}$|^(?=.*[A-Za-z])(?=.*[~!@#$%&*+_?])[A-Za-z~!@#$%&*+_?]{6,20}$|^(?=.*[~!@#$%&*+_?])(?=.*\d)[~!@#$%&*+_?\d]{6,20}$/,
userpass3:/^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%&*+?-_])[A-Za-z0-9~!@#$%&*+?_-]{6,20}$/,
chinaname:/^[\u4e00-\u9fa5]{2,15}$|^[a-z]{3,30}$/i,
id_number:/^\d{17}([xX]|\d)$/,
email:/^[a-z0-9-_]+@[a-z0-9-_]+\.[a-z0-9-_]{2,}$/i,
phonenumber:/^(13)[0-9]{9}$/
}
//验证开关
var text1=false,
text2=false,
test3=false,
test4=false,
test5=false,
test6=false,
test7=false;
//用自执行封装
(function(){
//导航imooc绑定事件
ele.myImooc.addEventListener("mouseover",function(){
ele.imooc_list.style.display="block";
console.log(ele.myImooc.after);
})
ele.myImooc.addEventListener("mouseout",function(){
ele.imooc_list.style.display="none";
})
//表单绑定事件
ele.user.addEventListener("blur",function(){
if(formRegexp.user.test(ele.user.value)){
ele.prompt[0].innerHTML="用户名输入正确"
ele.prompt[0].style.color="green";
text1=true;
}else{
ele.prompt[0].style.color="red";
}
})
ele.userpass.addEventListener("blur",function(){
console.log(formRegexp.userpass2.exec(ele.userpass.value));
console.log(ele.pass_val.children[1]);
if(ele.userpass.value==""){
ele.prompt[1].innerHTML="6-20位字母,数字或符号"
ele.prompt[1].style.color="red";
}else if(formRegexp.userpass1.test(ele.userpass.value)){
ele.prompt[1].innerHTML="";
text2=true;
}else if(formRegexp.userpass2.test(ele.userpass.value)){
ele.pass_val.children[1].style.background="orange";
ele.pass_val.children[2].style.background="gray";
ele.prompt[1].innerHTML="";
text2=true;
}else if(formRegexp.userpass3.test(ele.userpass.value)){
ele.pass_val.children[1].style.background="orange";
ele.pass_val.children[2].style.background="green";
ele.prompt[1].innerHTML="";
text2=true;
}
})
ele.confirm.addEventListener("blur",function(){
if(ele.confirm.value==""){
ele.prompt[2].innerHTML="输入框不能为空";
ele.prompt[2].style.color="red";
}else if(ele.confirm.value==ele.userpass.value){
ele.prompt[2].innerHTML="两次输入一致";
ele.prompt[2].style.color="green";
text3=true;
}else if(ele.confirm.value!=ele.userpass.value){
ele.prompt[2].innerHTML="两次密码输入不一致,请重新输入";
ele.prompt[2].style.color="red";
}
})
ele.chinaname.addEventListener("blur",function(){
if(!formRegexp.chinaname.test(ele.chinaname.value)){
ele.prompt[3].innerHTML="姓名只能包含中文或者英文,且中文字符在2-15之间,英文字符在3-30个之间";
ele.prompt[3].style.color="red";
}else{
ele.prompt[3].innerHTML="姓名输入正确";
ele.prompt[3].style.color="green";
text4=true;
}
})
ele.id_number.addEventListener("blur",function(){
if(ele.id_number==""){
ele.prompt[5].innerHTML="证件号码不能为空";
ele.prompt[5].style.color="red";
}else if(!formRegexp.id_number.test(ele.id_number.value)){
ele.prompt[5].innerHTML="请输入18位证件号码";
ele.prompt[5].style.color="red";
}else{
ele.prompt[5].innerHTML="证件号码正确";
ele.prompt[5].style.color="green";
text5=true;
}
})
ele.email.addEventListener("blur",function(){
if(ele.email.value==""){
ele.prompt[6].innerHTML="邮箱地址不能为空";
ele.prompt[6].style.color="red";
}else if(!formRegexp.email.test(ele.email.value)){
ele.prompt[6].innerHTML="请输入有效邮箱地址";
ele.prompt[6].style.color="red";
}else{
ele.prompt[6].innerHTML="邮箱格式正确";
ele.prompt[6].style.color="green";
text6=true;
}
})
ele.phonenumber.addEventListener("blur",function(){
if(ele.phonenumber.value==""){
ele.prompt[7].innerHTML="手机号码不能为空";
ele.prompt[7].style.color="red";
}else if(!formRegexp.phonenumber.test(ele.phonenumber.value)){
ele.prompt[7].innerHTML="请输入有效手机号码";
ele.prompt[7].style.color="red";
}else{
ele.prompt[7].innerHTML="手机格式正确";
ele.prompt[7].style.color="green";
test7=true;
}
})
//姓名规则绑定事件
ele.nameset.addEventListener("click",function(){
ele.nameset_text.style.display="block";
})
ele.nameset_text.addEventListener("mouseout",function(){
ele.nameset_text.style.display="none";
})
//read开关
ele.read.addEventListener("change",function(){
if(ele.read.checked==true){
ele.next.disabled=false;
ele.next.className="next1";
}else{
ele.next.disabled=true;
ele.next.className="next2";
}
})
//next事件
var arr=[];
ele.next.addEventListener("click",function(){
if(text1&&text2&&text3&&text4&&text5&&text6&&text7){
arr.push(ele.user.value).push(ele.userpass.value).push(ele.chinaname.value).push(ele.cert.value).push(ele.id_number.value).push(ele.email.value).push(ele.phonenumber.value).push(ele.passengers.value);
return window.location.href="http://www.imooc.com";
}else{
alert("输入有误");
}
})
console.log(arr);
})()<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>中国铁路客服中心</title> <link rel="stylesheet" href="css/csstext.css"> </head> <body> <div class="top"> <div class="logo"><img src="img/logo.png" alt="logo"><p>慕课高铁客户服务中心|<span>客户服务</span></p></div> <div class="login"> 意见反馈<a href="#">imooc@com</a> 你好,请<a href="#">登录</a>|<a class="registered" href="#">注册</a> <span class="myImooc">我的IMOOC <div id="imooc_list"> <ul> <li>未完成订单</li> <li>已完成订单(改/退)</li> <li>我的保险</li> <li>查看个人信息</li> <li>账户安全</li> <li>常用联系人</li> <li>重点旅客预定</li> <li>遗失物品查找</li> <li>服务查询</li> <li>投诉</li> <li>建议</li> </ul> </div> </span> <span><img src="img/未标题-1.png" alt="">手机版</span> </div> </div> <div class="main"> <div class="loginViev"> <p>你现在的位置:<span>客运首页>注册</span></p> <div class="loginform"> <div>账户信息</div> <form id="form"> <table> <tr> <td width="70px" align="right">用户名:</td> <td width="207px"><input type="text" class="input" name="" id="user" placeholder="用户设置成功后不能修改"></td> <td><span class="prompt">6-30位字母,数字或符合</span></td> </tr> <tr> <td align="right">登录密码:</td> <td><input type="password" class="input" name="" id="userpass" placeholder="6-20位数字,字母或符合"><p class="prompt"></p></td> <td> <div class="pass_val"> <div></div> <div></div> <div></div> <div></div> </div> </td> </tr> <tr> <td align="right">确认密码:</td> <td><input type="password" class="input" name="" id="confirm" placeholder="再次输入你的登录密码"></td> <td><span class="prompt"></span></td> </tr> <tr> <td align="right">姓名:</td> <td><input type="text" class="input" name="" id="chinaname" placeholder="请输入姓名"></td> <td> <span class="prompt nameset">姓名填写规则 <div class="nameset_text"> <p>1.确认姓名中生僻字无法输入时,可用生僻字拼音或同音字替代。</p> <p>2.输入姓名保存后,遇有系统无法正确显示的汉字,可用该汉字的拼音或同音字重新修改后保存。</p> <p>3.姓名中有繁体字无法输入时,可用简体替代。</p> <p>4.姓名较长,汉字与英文字符合计超过30个(1个汉字算2个字符)的,需按姓名中第一个汉字或英文字符开始按顺序连续输入30个字符(空格字符不输入),其中英文字符输入时不区别大小写</p> </div> </span> </td> </tr> <tr> <td align="right">证件类型:</td> <td> <select name="" id="cert"> <option value="china_id">二代身份证</option> <option value="hk_id">港澳通行证</option> <option value="driver">台湾通行证</option> <option value="passport">护照</option> </select> </td> <td><span class="prompt"></span></td> </tr> <tr> <td align="right">证件号码:</td> <td><input type="text" class="input" name="" id="id_number" placeholder="请输入你的证件号码"></td> <td><span class="prompt"></span></td> </tr> <tr> <td align="right">邮箱:</td> <td><input type="text" class="input" name="" id="email" placeholder="请正确填写邮箱地址"></td> <td><span class="prompt"></span></td> </tr> <tr> <td align="right">手机号码:</td> <td><input type="text" class="input" name="" id="phonenumber" placeholder="请输入你的手机号码"></td> <td><span class="prompt">请正确填写手机号码,稍后将向该手机号码发送短信验证码</span></td> </tr> <tr> <td align="right">旅客类型</td> <td> <select name="" id="passengers"> <option value="adult">成人</option> <option value="studen">学生</option> <option value="children">儿童</option> <option value="handicapped_militiry">残疾军人</option> <option value="handicapped_police">伤残人民警察</option> </select> </td> <td><span class="prompt"></span></td> </tr> <tr> <td></td> <td colspan="2"> <input type="checkbox" name="" id="read">我已阅读并遵 <a href="#">《中国铁路客户服务中心网站服务条款》</a> </td> </tr> </table> <button class="next2" id="next" disabled>下一步</button> </form> </div> </div> </div> <div class="bottom"> <p>关于我们|网站声明</p> <p>copyright @ 2017 imooc.com All Rights Reserved | 京ICP备13046642号-2</p> </div> <script src="javascript/from.js"></script> </body> </html>
3回答
好帮手慕粉
2019-11-13
同学你好,关于同学的问题解答如下:
1、点击下一步的时候,页面其实发生了表单提交,不是重新刷新,我们可以对比下提交前后的网页地址:
提交前:

点击“下一步”之后:

会发现最后多了一个问号,其实这是表单的默认跳转行为。因为“下一步”是一个button按钮,就相当于submit,当点击的时候,它是会有表单的提交功能的,所以当点击以后,执行的就是表单的跳转,而不是同学设置的window.location.href = "http://www.imooc.com"这段代码,因为表单里没有action,即表单提交成功的页面,所以看着就好像页面重新刷新了一样。建议同学给button按钮设置type="button",设置成普通按钮,当点击的时候,就不会执行表单的提交,而是地址的跳转了。
参考:

2、同学在设置跳转的条件时,单词拼错了,同学定义的是test,而条件里面写的都是text,看同学的代码大部分都是text,我们就以text为基准进行修改。参考:



3、在向数组中添加元素时,不能使用arr.push().push().push().....方法,语法是不正确的,如果要在后面追加,要一个一个的来,例:

其余的同学自己修改一下。
如果我的回答帮助到了你,欢迎采纳,祝学习愉快~
好帮手慕粉
2019-11-13
同学你好,用for循环就可以实现。参考以下代码:
老师只是给同学提供了一个思路哦,剩下的同学自己尝试着实现一下。
如果我的回答帮助到了你,欢迎采纳,祝学习愉快~
敲着敲着
提问者
2019-11-13
谢谢指点,像提交数组,有没有遍历方法
相似问题