#javascript #html
#javascript #HTML
Вопрос:
Я написал простой html-код javascript для проверки имени пользователя и пароля, но функция authorize() не вызывается при отправке формы. Может ли кто-нибудь помочь мне найти ошибку в моем коде. Я знаю, что такой же вопрос существует, и я следил за ними, но я не смог найти свою ошибку. Спасибо. Ниже приведен мой код
<script type="type/javascript" >
var users = {{"Username":"Sunny","Password":"Panzer"},{"Username":"Anjali","Password":"406460"}};
function authorize()
{
var username= document.getElementById("username").value;
var password = document.getElementById("password").value;
for(var i=0;i<users.length;i )
{
if(users[i].Username==username amp;amp; users[i].Password==password)
{
return true;
}
}
alert("invalid username or password");
return false;
}
</script>
<form action="enter_details.html" onsubmit="return authorize()" >
<center>Username <input type="text" id="username"></center><br><br>
<center>Password <input type="text" id="password"></center><br><br>
<center><input type="submit" id="login_button" value="Log In"></center>
</form>
Комментарии:
1. попробуйте проверить консоль разработчика, вы должны увидеть синтаксическую ошибку где-то рядом с
var users = ...
2. Я предполагаю, что это просто какое-то хобби или демонстрационная система? Проверка имени пользователя и пароля в коде браузера совершенно небезопасна … любой может просто просмотреть исходный код страницы с помощью встроенных инструментов браузера, а затем просмотреть все сохраненные имена пользователей и пароли. Вы никогда не должны реализовывать это в реальной пользовательской системе
3. Во-первых , изменить свой код <script type=»type/javascript»> cause it’s not right , the right way is : <script type=»text/javascript»>
4. @rapaelec удивительно, что это сработало. Большое вам спасибо
Ответ №1:
Вы должны заключить свой массив JSON в квадратные (а не фигурные) скобки, например:
var users = [{
"Username": "Sunny",
"Password": "Panzer"
},
{
"Username": "Anjali",
"Password": "406460"
}
];
function authorize() {
var username = document.getElementById("username").value;
var password = document.getElementById("password").value;
for (var i = 0; i < users.length; i ) {
if (users[i].Username == username amp;amp; users[i].Password == password) {
return true;
}
}
alert("invalid username or password");
return false;
}
<form action="enter_details.html" onsubmit="return authorize()">
<center>Username <input type="text" id="username"></center><br><br>
<center>Password <input type="text" id="password"></center><br><br>
<center><input type="submit" id="login_button" value="Log In"></center>
</form>
Ответ №2:
Здесь у нас есть две проблемы
1- пользователи должны быть массивом объектов, подобных :
var users = [{"Username":"Sunny","Password":"Panzer"},{"Username":"Anjali","Password":"406460"}];
2- когда вы вставляете свой код javascript в html, это не: type=»type / javascript», а type=»text / javascript»
для возобновления ваш код должен быть похож :
<script type="text/javascript">
var users = [{"Username":"Sunny","Password":"Panzer"},{"Username":"Anjali","Password":"406460"}];
function authorize()
{
var username= document.getElementById("username").value;
var password = document.getElementById("password").value;
for(var i=0;i<users.length;i )
{
if(users[i].Username==username amp;amp; users[i].Password==password)
{
return true;
}
}
alert("invalid username or password");
return false;
}
</script>
Я надеюсь, что это поможет вам
Ответ №3:
Попробуйте использовать прослушиватели событий
Добавьте атрибут id в форму
<form id="myForm" action="enter_details.html" onsubmit="return authorize()" >
<center>Username <input type="text" id="username"></center><br><br>
<center>Password <input type="text" id="password"></center><br><br>
<center><input type="submit" id="login_button" value="Log In"></center>
</form>
И добавьте код прослушивателя событий в is
document.querySelector("#myForm")
.addEventListener("submit", function(eve) {
eve.preventDefault();
authorize();
}
Если это не сработало, попробуйте использовать кнопку ввода
document.querySelector("#login_button")
.addEventListener("click", function(eve) {
eve.preventDefault();
authorize();
}
Ответ №4:
var users = [{"Username":"Sunny","Password":"Sunny"},{"Username":"Anjali","Password":"406460"}];
function authorize(){
var username= document.getElementById("username").value;
var password = document.getElementById("password").value;
for(var i=0;i<users.length;i )
{
if(users[i].Username==username amp;amp; users[i].Password==password)
{
return true;
}
}
alert("invalid username or password");
return false;
}
<form onsubmit="authorize()" >
<center>Username <input type="text" id="username"></center><br><br>
<center>Password <input type="text" id="password"></center><br><br>
<center><input type="submit" id="login_button" value="Log In"></center>
</form>
Ответ №5:
Если вы хотите использовать функцию обратного вызова для отправки формы, вам нужно нажать кнопку отправки и использовать event.preventDefault();
для предотвращения перехода на страницу при обратном вызове, который является действием формы по умолчанию
<form>
<center>Username <input type="text" id="username"></center><br><br>
<center>Password <input type="text" id="password"></center><br><br>
<center><input type="submit" onclick="authorize(event)" id="login_button" value="Log In"></center>
</form>
<script>
var users = [{"Username":"Sunny","Password":"Panzer"},{"Username":"Anjali","Password":"406460"}];
function authorize(event)
{
event.preventDefault();
var username= document.getElementById("username").value;
var password = document.getElementById("password").value;
for(var i=0;i<users.length;i )
{
if(users[i].Username==username amp;amp; users[i].Password==password)
{
return true;
}
}
alert("invalid username or password");
return false;
}
</script>
Комментарии:
1. Я тестирую его на своем компьютере, он работает нормально. И я вижу содержимое предупреждения
Ответ №6:
Я считаю, что ваша основная проблема заключается в том, что переменная users
должна быть an array
. Ваш текущий синтаксис недопустим для определения переменной users
и выдаст ошибку (вы можете проверить консоль, чтобы увидеть это). Проверьте следующий пример с этим исправлением.
var users = [
{"Username":"Sunny","Password":"Panzer"},
{"Username":"Anjali","Password":"406460"}
];
function authorize()
{
var username = document.getElementById("username").value;
var password = document.getElementById("password").value;
for (var i = 0; i < users.length; i )
{
if (users[i].Username == username amp;amp; users[i].Password == password)
{
return true;
}
}
alert("invalid username or password");
return false;
}
<form onsubmit="return authorize()" >
<center>Username <input type="text" id="username"></center><br><br>
<center>Password <input type="text" id="password"></center><br><br>
<center><input type="submit" id="login_button" value="Log In"></center>
</form>
Более того, вы можете немного упростить authorize()
функцию, если используете Array.some():
function authorize()
{
var username = document.getElementById("username").value;
var password = document.getElementById("password").value;
let res = users.some(user => user.Username == username amp;amp; user.Password == password);
if (!res)
alert("invalid username or password");
return res;
}
Комментарии:
1. Я сделал это, но, однако, он не проверяется, когда я запускаю его в своем браузере. И поскольку ваш код в ответе и мой код одинаковы после изменений, он выполняется, когда я запускаю ваш код, сокращенный под вашим ответом.