Вы создали там очень надоедливую и трудную для поиска ошибку!
Нет, это не удвоение события в <input type="submit" value="Submit" onclick="submit()">
<input type="submit" value="Submit" onclick="submit()">
, хотя это можно считать плохой практикой
Обнаружить?
это submit ()!
Попробуйте это и отправьте форму
<form action="form.html" method="get" onsubmit="alert(getAttributeNames()); submit()">
<fieldset style="width: 80%; margin: auto;">
<legend>Feedback:</legend>
<label for="name">Name:</label><br />
<input type="text" id="name" name="name"><br><br>
<label for="email">Email:</label><br />
<input type="email" id="email" name="email"><br><br>
<label for="feedback">Feedback:</label><br />
<textarea id="feedback" name="feedback"></textarea><br>
<input type="submit" value="Submit" onclick="submit()">
</fieldset>
</form>
</section>
Удивлен, а? Вы нигде не определили getAttributeNames()
, пока работает! Как это вы спрашиваете ??
Это потому, что это один из многих встроенных методов DOM, которые наследует каждый html элемент. Теперь вы понимаете, что произошло, когда вы использовали onsubmit="submit()"
Он не вызывал написанную вами функцию submit (), вместо этого он вызывал встроенный метод submit (собственный формы), который отправляет его на сервер. и как только он будет отправлен, очевидно, что он не будет иметь никакого отношения к локальному хранилищу.
Исправить просто, просто используйте имена, которые не будут конфликтовать со встроенными. Или вы также можете использовать addEventListener () , потому что в этом случае вы можете явно указать браузеру «нет, используйте эту функцию, которую я написал, а не встроенную, пожалуйста»
Вот фиксированная версия Я только что изменил имя вашей функции
<form action="form.html" method="get" onsubmit="submit2()">
<fieldset style="width: 80%; margin: auto;">
<legend>Feedback:</legend>
<label for="name">Name:</label><br />
<input type="text" id="name" name="name"><br><br>
<label for="email">Email:</label><br />
<input type="email" id="email" name="email"><br><br>
<label for="feedback">Feedback:</label><br />
<textarea id="feedback" name="feedback"></textarea><br>
<input type="submit" value="Submit" onclick="submit()">
</fieldset>
</form>
</section>
<script>
function submit2() {
var name = document.getElementById("name").value;
var email = document.getElementById("email").value;
var feedback = document.getElementById("feedback").value;
localStorage.setItem("name", name);
localStorage.setItem("email", email);
localStorage.setItem("feedback", feedback);
return true;
}
function init() {
var name = localStorage.getItem("name");
var email = localStorage.getItem("email");
var feedback = localStorage.getItem("feedback");
document.write("passed value = " + name);
document.write("passed value = " + email);
document.write("passed value = " + feedback);
}
</script>