Довольно часто бывает необходимость добавить некий функционал полю ввода. Например - срыть / показать пароль пользователю, при вводе данных. Это значительно облегчает введение данных, особенно в случаях неисправности клавиатуры пользователя (западают кнопки, не пропечатываются, или не работает Caps или Shift.В общем, вещь не только привлекательная, но и порой, даже нужная!
В интернете вы найдете массу различных способов, как это сделать, но они, как правило, все написаны с библиотекой jQuery. Подключать библиотеку только для этого, бывает излишним, а переписывать нужные функции отдельно - трудозатратно, поэтому я решил написать код на чистом JavaScript.
Без долгих предисловий.
Рассмотрим вариант самого простого функционала - просто показать / скрыть пароль кликом на кнопку:
Меняется только надпись на кнопке.
В файле HTML ничего особенного. Просто поле ввода пароля и кнопка. Им добавлены идентификаторы -
JavaScript код я не стал выносить в отдельный файл и записал его здесь же.
Здесь мы получаем доступ к полю ввода и кнопке. Сохраняем их в глобальные переменные для того, чтобы каждый раз по клику не получать доступ - что является ресурсно затратной операцией.
На кнопку вешаем событие -
Внутри функции мы проверяем значение атрибута
Заодно и поменяли одержимое (название) кнопки
Можно это не делать, если не хотите добавлять достаточно затратную операцию
Ниже полностью код файла index.html
Смена надписи на кнопке и иконки в любой части кода
Идем на сайт Font Awesome и выбираем понравившиеся иконки.
Подключаем Font Awesome через CDN в нашем хедере.
Добавляем одну иконку на страницу.
Например:
Теперь мы будем менять не только атрибут, но и класс элемента
Остальное здесь все почти точно так же.
Ниже полностью код файла index.html
Несомненный плюс этого метода, это то, что иконку можно разместить в любой части сайта. Все примеры, я намеренно привожу без CSS, потому как это добавит вам простор для различных способов стилизации и оформления документа.
В этом коде все будет работать так как показано на картинке, но стоит помнить, что класс мы меняем новым свойством браузера, которое не поддерживается браузером IE < 10 версии.
В таких случаях можно использовать jquery или вариант ниже.
Смена надписи и иконки внутри кнопки
Этот вариант вообще простой и очень похож на первый, потому что мы здесь меняем только содержимое кнопки кодом
Ниже полностью код файла index.html
Суть в том, что мы можем сохранить то что вводит пользователь так как ест, а вместо этого подставить в поле ввода случайные символы.
То есть. Пользователь вводит, например - vvvvvvvvv, а в поле ввода видит - ZfhEysUFKk.
Точно. как на картинке ниже.
Для этого мы сохраняем то что ввел пользователь в переменную
Затем, мы из случайного числа генерируем символ -
В интернете вы найдете массу различных способов, как это сделать, но они, как правило, все написаны с библиотекой jQuery. Подключать библиотеку только для этого, бывает излишним, а переписывать нужные функции отдельно - трудозатратно, поэтому я решил написать код на чистом JavaScript.
Без долгих предисловий.
Рассмотрим вариант самого простого функционала - просто показать / скрыть пароль кликом на кнопку:
Вариант 1:самый простой.
Меняется только надпись на кнопке.
В файле HTML ничего особенного. Просто поле ввода пароля и кнопка. Им добавлены идентификаторы -
id, для того, чтобы можно было с ними работать при помощи JavaScript.JavaScript код я не стал выносить в отдельный файл и записал его здесь же.
Здесь мы получаем доступ к полю ввода и кнопке. Сохраняем их в глобальные переменные для того, чтобы каждый раз по клику не получать доступ - что является ресурсно затратной операцией.
На кнопку вешаем событие -
click и запускаем функцию.
Внутри функции мы проверяем значение атрибута
type у элемента input. Если это password, то мы меняем его на атрибут text, и наоборот.
Заодно и поменяли одержимое (название) кнопки
button.
Можно это не делать, если не хотите добавлять достаточно затратную операцию
.innerHTML. Для этого достаточно удалить код отмеченный красным.
Ниже полностью код файла index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<p>Enter the Password: <input type="password" id="show1"></p>
<button id="show">Show password</button>
<script>
var input = document.getElementById("show1");
var button = document.getElementById("show");
button.onclick = show;
function show () {
if(input.getAttribute('type') == 'password') {
input.removeAttribute('type');
input.setAttribute('type', 'text');
button.innerHTML='Hide password';
} else {
input.removeAttribute('type');
input.setAttribute('type', 'password');
button.innerHTML='Show password';
}
}
</script>
</body>
</html>
Вариант с иконкой.
Смена надписи на кнопке и иконки в любой части кода
Идем на сайт Font Awesome и выбираем понравившиеся иконки.
Подключаем Font Awesome через CDN в нашем хедере.
Добавляем одну иконку на страницу.
Например:
<i id="i" class="far fa-eye"></i>
Теперь мы будем менять не только атрибут, но и класс элемента
i, поэтому нам нужно добавить элементу идентификатор id
Остальное здесь все почти точно так же.
Ниже полностью код файла index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<!-- Font - Awesome -->
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.13/css/all.css" integrity="sha384-DNOHZ68U8hZfKXOrtjWvjxusGo9WQnrNx2sqG0tfsghAvtVlRW3tvkXWZh58N9jp" crossorigin="anonymous">
</head>
<body>
<!-- <i class="far fa-eye-slash"></i> вторая иконка закомментированна-->
<p>Enter the Password: <input type="password" id="show1"></p>
<button id="show">Show password</button><i id="i" class="far fa-eye"></i>
<script>
var button = document.getElementById("show");
button.onclick = show;
var input = document.getElementById("show1");
var icon = document.getElementById("i");
function show () {
if(input.getAttribute('type') == 'password') {
input.removeAttribute('type');
input.setAttribute('type', 'text');
button.innerHTML='Hide password';
icon.className = 'far fa-eye-slash';
} else {
input.removeAttribute('type');
input.setAttribute('type', 'password');
button.innerHTML='Show password';
icon.className = 'far fa-eye';
}
}
</script>
</body>
</html>
Несомненный плюс этого метода, это то, что иконку можно разместить в любой части сайта. Все примеры, я намеренно привожу без CSS, потому как это добавит вам простор для различных способов стилизации и оформления документа.
В этом коде все будет работать так как показано на картинке, но стоит помнить, что класс мы меняем новым свойством браузера, которое не поддерживается браузером IE < 10 версии.
В таких случаях можно использовать jquery или вариант ниже.
Третий вариант
Смена надписи и иконки внутри кнопки
Этот вариант вообще простой и очень похож на первый, потому что мы здесь меняем только содержимое кнопки кодом
.innerHTML, куда мы положили и наши иконки.
Ниже полностью код файла index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<!-- Font - Awesome -->
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.13/css/all.css" integrity="sha384-DNOHZ68U8hZfKXOrtjWvjxusGo9WQnrNx2sqG0tfsghAvtVlRW3tvkXWZh58N9jp" crossorigin="anonymous">
<!-- your file js -->
<script src="main.js" defer></script>
</head>
<body>
<p>Enter the Password: <input type="password" id="show1"></p>
<button id="show">Show password <i id="i" class="far fa-eye"></i></button>
<script>
var button = document.getElementById("show");
button.onclick = show;
var input = document.getElementById("show1");
var icon = document.getElementById("i");
function show () {
if(input.getAttribute('type') == 'password') {
input.removeAttribute('type');
input.setAttribute('type', 'text');
button.innerHTML='Hide password <i id="i" class="far fa-eye-slash">';
} else {
input.removeAttribute('type');
input.setAttribute('type', 'password');
button.innerHTML='Show password <i id="i" class="far fa-eye">';
}
}
</script>
</body>
</html>
Вариант с подменой вводимых символов.
Приведу такой вариант просто для информации. Если честно, то совершенно не могу представить, где он может пригодиться.Суть в том, что мы можем сохранить то что вводит пользователь так как ест, а вместо этого подставить в поле ввода случайные символы.
То есть. Пользователь вводит, например - vvvvvvvvv, а в поле ввода видит - ZfhEysUFKk.
Точно. как на картинке ниже.
Для этого мы сохраняем то что ввел пользователь в переменную
str, а вместо этого в this.value выводим случайный символ, полученный путем генерации случайного числа (от 65 до 122 - потому как это цифровое значение символов в разных регистрах разрешенных для паролей).Затем, мы из случайного числа генерируем символ -
String.fromCharCode(); И уже этот символ выводим в поле ввода присвоив его переменной this.value
Здесь приведу сам js скрипт
var str = ""; // то что ввел юзер
document.getElementById("test").onkeypress = function (event) {
// то что ввел юзер
// var str = this.value;
str = str + event.key;
console.log(str);
// вывод в инпут случайных символов
this.value += String.fromCharCode(getRandomInt(65, 122));
// запрет вывода в инпут того что вводит пользователь
return false;
}
// функция генерации случайного числа от - до
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min)) + min;
}



Спасибо!
ОтветитьУдалить