所以我有一个主要的HTML页面与额外的HTML页面创建一个用户登录(作为一个创建的用户)。我使用localStorage来存储用户数据,并希望用户保持登录(在主页),直到他们注销(还没有得到那部分,我不知道该怎么做)。
我的主要问题是,我的控制台说,它不能读取属性的preventDefault();函数,但只针对第一个函数。其次,我确实设法使它存储一些数据作为名称和密码,但它不工作的登录网页。我是否应该尝试其他方法/编写不同的代码?提前感谢您的帮助!:)
(是的,我知道这两个非常相似)
所以对于我的登录页面:
<a href="index.html"><button id="knapp">hjem</button></a>
<br>
<br>
<br>
<form onsubmit="login()">
<div id="form">
<div>
<label for="userName">Username</label>
<br>
<input id="name" name="name" type="text">
</div>
<br>
<div>
<label for="password">Password</label>
<input id="password" name="password" type="password">
</div>
<br>
<button id="submit" type="submit" >Login</button>
<p id="result">Welcome! please login</p>
<a href="lagBruker.html">har du ikke bruker? lag her!</a>
</div>
</form>
对于我的创建用户页面:
<a href="index.html"><button id="hjem">hjem</button></a>
<br>
<br>
<br>
<form onsubmit="lagBruker(event)">
<div id="form">
<div>
<label for="userName">Username</label>
<br>
<input id="name" name="name" type="text">
</div>
<br>
<div>
<label for="password">Password</label>
<input id="password" name="password" type="password">
</div>
<br>
<p id="result">trykk her for å opprette bruker</p>
<button id="submit" type="submit" >Lag Bruker</button>
<a href="login.html">login her</a>
</div>
</form>
对于我的javascript:
const lagBruker = e => {
let name = document.getElementById("name").value;
let password = document.getElementById("password").value;
let formData = JSON.parse(localStorage.getItem('formData')) || [];
let exist = formData.length &&
JSON.parse(localStorage.getItem('formData')).some(data =>
data.name.toLowerCase() === name.toLowerCase()
);
if (!exist) {
formData.push({name, password});
localStorage.setItem('formData', JSON.stringify(formData));
document.querySelector('form').reset();
document.getElementById('name').focus();
alert("Bruker er opprettet! log inn med linken")
} else {
alert("noe feil har skjedd, har du allerede bruker?")
}
e.preventDefault();
}
lagBruker();
const login = e => {
let name = document.getElementById("name").value;
let password = document.getElementById("password").value;
let formData = JSON.parse(localStorage.getItem('formData')) || [];
JSON.parse(localStorage.getItem('formData')) || [];
let exist = formData.length &&
JSON.parse(localStorage.getItem('formData')).some(data => data.name.toLowerCase() == name && data.password.toLowerCase() == password);
if(!exist){
alert("inkorrekt")
}else{
location.href = "index.html";
}
e.preventDefault();
}
login();
您的login
函数定义为
const login = e => {
//...
e.preventDefault();
};
但是您的表单提交调用login()
,因此e
最终是undefined
,并且您最终调用(undefined).preventDefault()
,这会抛出错误。
建议:
通常在JS中添加事件侦听器比在HTML标签上添加事件侦听器更好。
<form id="login-form">
...
</form>
const form = document.getElementById("login-form");
form.addEventListener("submit", (e) => { ... });
也可以直接从表单构造一个FormData
对象,并通过输入的"名称"访问输入。属性:
form.addEventListener("submit", (e) => {
const formData = new FormData(e.target);
const name = formData.get("name");
const password = formData.get("password");
...
});