Я создаю поле пароля, где пользователь может либо скрыть / показать пароль, который он вводит. Ниже приведены коды html и javascript. Проблема в том, когда я тестирую код в браузере: - Я ввожу пароль и нажимаю кнопку «показать / скрыть», пароль становится видимым, и страница обновляется, после чего пароль пропадает. Как мне решить эту проблему?
html:
<html>
<head>
<meta charset = "utf-8" />
<title> Page Title </title>
<meta name = "viewport" content = "width= device-width, initial-scale=1">
<script src = "main.js"></script>
</head>
<body>
<form action = "">
<input type = "text" name = "uid" placeholder = "Username">
<input id = "loginPwdChange" type = "password" name = "pwd" placeholder = "Password">
<button onclick = "changePwdView()"> Show/Hide </button>
<button type = "submit" name = "submit"> Login </button>
</form>
</body>
</html>
JS:
let loginPwdStatus = false;
function changePwdView(){
let getLoginInput = document.getElementById("loginPwdChange");
if (loginPwdStatus === false){
getLoginInput.setAttribute("type", "text");
loginPwdStatus = true;
}else if (loginPwdStatus === true){
getLoginInput.setAttribute("type", "password");
loginPwdStatus = false;
}
}
@BlackCat Вам нужно отправить форму обратно на сервер?
На данный момент мне не нужно



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Измените тег кнопки на type = "button"
<html>
<head>
<meta charset = "utf-8" />
<title> Page Title </title>
<meta name = "viewport" content = "width= device-width, initial-scale=1">
<script src = "main.js"></script>
</head>
<body>
<form action = "">
<input type = "text" name = "uid" placeholder = "Username">
<input id = "loginPwdChange" type = "password" name = "pwd" placeholder = "Password">
<button onclick = "changePwdView()"> Show/Hide </button>
<button type = "button" name = "submit"> Login </button>
</form>
</body>
</html>
А затем вы можете добавить обработчик для вызова ajax при нажатии кнопки Login
добавить type = "button" к кнопке показать / скрыть;
let loginPwdStatus = false;
function changePwdView(){
let getLoginInput = document.getElementById("loginPwdChange");
if (loginPwdStatus === false){
getLoginInput.setAttribute("type", "text");
loginPwdStatus = true;
}else if (loginPwdStatus === true){
getLoginInput.setAttribute("type", "password");
loginPwdStatus = false;
}
}<html>
<head>
<meta charset = "utf-8" />
<title> Page Title </title>
<meta name = "viewport" content = "width= device-width, initial-scale=1">
<script src = "main.js"></script>
</head>
<body>
<form action = "">
<input type = "text" name = "uid" placeholder = "Username">
<input id = "loginPwdChange" type = "password" name = "pwd" placeholder = "Password">
<button onclick = "changePwdView()" type = "button"> Show/Hide </button>
<button type = "submit" name = "submit"> Login </button>
</form>
</body>
</html>Это потому, что ваша кнопка для отображения / скрытия пароля отправляет форму. При нажатии кнопки показать / скрыть, вам нужно предотвращать формы от отправки.
Два возможных решения:
Только с HTML
Измените вашу кнопку на type = "button". Это предотвратит отправку формы.
let loginPwdStatus = false;
function changePwdView() {
let getLoginInput = document.getElementById("loginPwdChange");
if (loginPwdStatus === false) {
getLoginInput.setAttribute("type", "text");
loginPwdStatus = true;
} else if (loginPwdStatus === true) {
getLoginInput.setAttribute("type", "password");
loginPwdStatus = false;
}
}<html>
<head>
<meta charset = "utf-8" />
<title> Page Title </title>
<meta name = "viewport" content = "width= device-width, initial-scale=1">
<script src = "main.js"></script>
</head>
<body>
<form action = "">
<input type = "text" name = "uid" placeholder = "Username">
<input id = "loginPwdChange" type = "password" name = "pwd" placeholder = "Password">
<button type = "button" onclick = "changePwdView()"> Show/Hide </button>
<button type = "submit" name = "submit"> Login </button>
</form>
</body>
</html>С помощью JavaScript
Вы можете сделать это с помощью preventDefault().
Обратите внимание на следующие вещи:
event вашей функции: onclick = "changePwdView(event)"function changePwdView(event) { ... }event.preventDefault();let loginPwdStatus = false;
function changePwdView(event) {
event.preventDefault();
let getLoginInput = document.getElementById("loginPwdChange");
if (loginPwdStatus === false) {
getLoginInput.setAttribute("type", "text");
loginPwdStatus = true;
} else if (loginPwdStatus === true) {
getLoginInput.setAttribute("type", "password");
loginPwdStatus = false;
}
}<html>
<head>
<meta charset = "utf-8" />
<title> Page Title </title>
<meta name = "viewport" content = "width= device-width, initial-scale=1">
<script src = "main.js"></script>
</head>
<body>
<form action = "">
<input type = "text" name = "uid" placeholder = "Username">
<input id = "loginPwdChange" type = "password" name = "pwd" placeholder = "Password">
<button onclick = "changePwdView(event)"> Show/Hide </button>
<button type = "submit" name = "submit"> Login </button>
</form>
</body>
</html><button type = "button" onclick = "changePwdView()"> Show/Hide </button> может помочь
Ваше здоровье
Помимо type = "button", вы можете заменить весь блок if / then / else одной строкой: getLoginInput.type = getLoginInput.type === 'text'? 'пароль': 'текст';