信息填充功能e.preventDefault();和oForm.submit();
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> div{ width: 500px; height: 200px; position: absolute; left: 50%; margin-left: -250px; /* background-color: pink; */ text-align: center; } </style> <script type="module"> import { set, get, remove } from"./cookie.js" window.onload=function(){ var oLogin=document.getElementById("login"); var oDelete=document.getElementById("delete"); var oUsername=document.getElementById("username"); var beforeUserName; var oForm=document.getElementById("form"); // 检查cookie有没有已经保存的用户名,如果有则自动填充 function checkBeforeUserName(){ if(document.cookie){ // console.log(get('userName')); beforeUserName=get('userName'); oUsername.value=beforeUserName; } } checkBeforeUserName(); // 点击登录自动保存用户名到cookie oLogin.addEventListener('click',function(e){ e.preventDefault(); if(oLogin.value){ set('userName',oUsername.value,{maxAge:1000}) // document.cookie=`userName=${oUsername.value}; max-age=1000`; } oForm.submit(); }) // 点击删除自动从cookie删除用户名记录 oDelete.addEventListener('click',function(e){ e.preventDefault(); // document.cookie=`userName=${oUsername.value}; max-age=-1`; remove('userName') oForm.submit(); }) } </script> </head> <body> <div> <form id="form" action=""> 用户名:<input id="username" type="text" placeholder="请输入用户名"><br> 密码:<input type="password" ><br> <input id="login" type="submit" value="登录"> <input id="delete" type="submit" value="删除"> </form> </div> </body> </html>
cookie.js
// 写入 Cookie const set = (name, value, { maxAge, domain, path, secure } = {}) => { let cookieText = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`; if (typeof maxAge === 'number') { cookieText += `; max-age=${maxAge}`; } if (domain) { cookieText += `; domain=${domain}`; } if (path) { cookieText += `; path=${path}`; } if (secure) { cookieText += `; secure`; } document.cookie = cookieText; // document.cookie='username=alex; max-age=5; domain=' }; // 通过 name 获取 cookie 的值 const get = name => { name = `${encodeURIComponent(name)}`; const cookies = document.cookie.split('; '); for (const item of cookies) { const [cookieName, cookieValue] = item.split('='); if (cookieName === name) { return decodeURIComponent(cookieValue); } } return; }; // 'username=alex; age=18; sex=male' // ["username=alex", "age=18", "sex=male"] // ["username","alex"] // get('用户名'); // 根据 name、domain 和 path 删除 Cookie const remove = (name, { domain, path } = {}) => { set(name, '', { domain, path, maxAge: -1 }); }; export { set, get, remove };
老师,代码中的这两个是否是本功能必须的?我试了不添加也可以成功实现,为啥?
e.preventDefault();
oForm.submit();
11
收起
正在回答
1回答
同学你好,不是必须的,需要看实际需求使用,首先,e.preventDefault()是用于阻止事件默认行为的,oForm.submit()是用于提交表单的。
其次,在这段代码中点击form表单中的提交按钮(<input id="login" type="submit" value="登录">),会有默认提交表单的行为,此时如果要阻止其默认提交表单,在提交表单之前还有其它操作(比如:验证表单),那么就要添加e.preventDefault(),等其它操作完成之后,再执行oForm.submit()提交表单数据。
如果想要在点击form表单中的提交按钮时,直接提交表单数据,没有其它操作的话,就可以不使用e.preventDefault()和oForm.submit()。所以,没有这两句代码也可以提交表单,这两句代码其实就是实现手动提交表单。
祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星