Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как открыть текст в инпуте с type=password? (https://javascript.ru/forum/events/32153-kak-otkryt-tekst-v-inpute-s-type%3Dpassword.html)

Leanidas 26.10.2014 01:05

Цитата:

Сообщение от bes (Сообщение 208492)
для понта ;) (шутка)
решение со сменой type всё же логичнее и проще и не подходит только для IE<9, поэтому основывать решение изначально на костыле имхо не гуд, потом только удалить кусок костыльного кода

Здравствуйте. А смотрите я хочу что бы место пароля у меня так же и остались *** но рядом была кнопка типо глазика при нажатии которой показывался бы пароль. Как это осуществить? помогите пожалуйста)

danik.js 26.10.2014 04:28

Если поддержка IE8 не нужна, то:
<!DOCTYPE html>
<link href="http://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet" />
<style>
	input{
		vertical-align: middle;
		font-family: "Lucida Console", Monaco, monospace;
	}
	input::-ms-reveal,
	input::-ms-clear
	{
		display: none;
	}
	.password-reveal{
		border: none;
		padding: 0;
		width: 1.3em;
		height: 1.2em;
		margin-left: -1.9em;
		vertical-align: middle;
		background: none;
		color: #555;
		cursor: default;
	}
	.password-reveal:hover{
		color: #222;
	}
</style>
<span class="input-wrap">
	<input type="password" value="password" />
	<button tabindex="-1" aria-hidden="true" class="password-reveal" type="button"><span class="fa fa-eye"></span></button>
</span>
<script>
(function() {
	var eye = document.querySelector('.password-reveal');
	eye.onmousedown = function() {
		return false;
	};
	eye.onclick = function() {
		var input = this.previousElementSibling;
		var selection = {start: input.selectionStart, end: input.selectionEnd};
		input.type = {text: 'password', password: 'text'}[input.type];
		input.selectionEnd = selection.end;
		input.selectionStart = selection.start;
		return false;
	};
})();
</script>

bes 26.10.2014 09:31

Цитата:

Сообщение от Leanidas
Здравствуйте. А смотрите я хочу что бы место пароля у меня так же и остались *** но рядом была кнопка типо глазика при нажатии которой показывался бы пароль. Как это осуществить? помогите пожалуйста)

проблема в том, чтобы приделать глаз вместо кнопки что ли? :)

<style>
img {
	position: relative;
	width: 1em;
	height: 1em;
	top: 0.2em;
	left: -1.5em;
	z-index: 100;
}
</style>
<input type="password" value="something wrong">
<img src="http://www.wordassociations.ru/image/600x/svg_to_png/Anonymous_eye.png">
<script>
(function () {
	var input = document.querySelector("input");
	document.querySelector("img").addEventListener("click", function () {
		if (input.getAttribute('type') != 'text') {
			input.setAttribute('type', 'text');
		} else {
			input.setAttribute('type', 'password');
		}
	});
})();
</script>

danik.js 26.10.2014 11:55

bes, а почему атрибуты вместо свойств?
Кстати, заметил, что map выглядит выразительней, чем тернарный оператор:

input.type = {text: 'password', password: 'text'}[input.type];



input.type = input.type == 'text' ? 'password' : 'text';


Или мне одному так кажется?

рони 26.10.2014 12:38

danik.js,
мысли вслух ...
input.type = input.type != 'text' ? 'text':'password' ;
с "неравно" конструкция надёжнее и сработает например при смене стиля display по умолчанию
или придётся добавить ещё '' : 'none'
и вариант использования )))
<style>
    span {
        cursor: pointer;
    }
</style>
<span class="test"></span>
<script>
    (function() {
        function wordReplace(elem, first, last) {
            var word = {};
            word[first] = last;
            word[last] = first;
            elem.innerHTML = first;
            elem.onclick = function() {
                elem.innerHTML = word[elem.innerHTML]
            }
        }
        var test = document.querySelector('.test');
        wordReplace(test, 'первый', 'второй')
    })();
</script>

bes 26.10.2014 12:56

Цитата:

Сообщение от danik.js
bes, а почему атрибуты вместо свойств?

вероятно пережитки прошлого

ещё более вероятно, что отстал в развитии, так как не понял на основе чего ты это провернул
Цитата:

Сообщение от danik.js
input.type = {text: 'password', password: 'text'}[input.type];


danik.js 26.10.2014 13:17

Ну в IE8 этот код в любом случае не работает ) Ну а насчет Chrome надеюсь ошиблись. Иначе это печально.
Цитата:

Сообщение от bes
что отстал в развитии

Боюсь это деградация ) Это же ассоциативный массив, тут же получаем свойство по ключу.

Или в чем проблема? Кажется способ не очень выразительный )

bes 26.10.2014 13:17

Цитата:

Сообщение от bes
ещё более вероятно, что отстал в развитии, так как не понял на основе чего ты это провернул

сорри, здесь просто тупанул, всё понятно :)

bes 26.10.2014 13:24

Цитата:

Сообщение от danik.js
Боюсь это деградация ) Это же ассоциативный массив, тут же получаем свойство по ключу.

Или в чем проблема? Кажется способ не очень выразительный )

lf-lf да-да, это деградация
причём сбил с толку
Цитата:

Сообщение от danik.js
что map

и начал искать особый смысл :D

Leanidas 26.10.2014 14:00

Цитата:

Сообщение от bes (Сообщение 337619)
проблема в том, чтобы приделать глаз вместо кнопки что ли? :)

<style>
img {
	position: relative;
	width: 1em;
	height: 1em;
	top: 0.2em;
	left: -1.5em;
	z-index: 100;
}
</style>
<input type="password" value="something wrong">
<img src="http://www.wordassociations.ru/image/600x/svg_to_png/Anonymous_eye.png">
<script>
(function () {
	var input = document.querySelector("input");
	document.querySelector("img").addEventListener("click", function () {
		if (input.getAttribute('type') != 'text') {
			input.setAttribute('type', 'text');
		} else {
			input.setAttribute('type', 'password');
		}
	});
})();
</script>

Блин наверно глупые вопросы)) а каких файлах это писать и где что Что бы вот тут где у меня регистрация рядом с полем пароль появился глаз или кнопочка при нажатии которой просматривать пароль. http://mb.msk0.ru/index.php?route=ac...simpleregister


Часовой пояс GMT +3, время: 18:50.