信息填充功能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 星