Jump to content
  • 0

форма логина-пароля


kalyaka-malyaka
 Share

Question

Доброго времени суток :)

Вопрос у меня по форме логина-пароля.

Задача - сделать следующее:

u38bjre8-4kb.jpg

Я понимаю, что форму пароля надо делать так:

<input type="password" />

также я понимаю, что чтобы в поле было вбито заранее слово password, надо его вписать в value=""

но если у инпута тип password, то содержимое value сразу отображается звездочками.

а можно как-то сделать, чтобы при загрузке страницы в поле пароля стояло видимое слово password, а набирался потом пароль скрытым - звездочками?

что-то путано у меня получилось объяснить :)

я просто не могу придумать, что у гугла спросить и в какую сторону копать.

помогите, плиз.

Link to comment
Share on other sites

Recommended Posts

  • 0

Можно поверх инпута наложить блок с текстом, который убирать при щелчке по нему или получении инпутом фокуса.

Пробовал сначала выводить в поле text, а потом менять его тип на password, но это не срабатывало.

Link to comment
Share on other sites

  • 0
А так не прокатит:

<input type="password" name="passw" value="password" onfocus="if(this.value == 'password') {this.value='';};" onblur="if(this.value == '') {this.value='password';};" maxlength="10"/>

так все равно сразу точки видны, а не слово password :)

Можно поверх инпута наложить блок с текстом, который убирать при щелчке по нему или получении инпутом фокуса.

м... пытаюсь представить. если блок поверх, то придется 2 раза кликать - чтобы убрать, и чтобы попасть мышкой в инпут. а если к фокусу притвязываться, то, наверное, вообще не получится. как инпут получит фокус, если поверх лежит блок?

Пробовал сначала выводить в поле text, а потом менять его тип на password, но это не срабатывало.

вот я тоже в эту сторону думала...

но как-то же это делают! :)

я сама не припомню, честно говоря. но мой дизайнер утверждает, что 100 раз видел это в тырнете. и отрисовал именно так. и это приняли. а я в джаваскрипте дуб-дерево. могу только копипастить рабочие скрипты.

блин :)

Link to comment
Share on other sites

  • 0

Вывел текстовое поле через innerHTML и при щелчке оно заменяется полем с паролем. Сделано на коленке, но смысл понятен.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<head>
<title>Untitled Document</title>
<script type="text/javascript">
function f1 () {
document.getElementById("pass").innerHTML = '<input type="text" value="Пароль, быстро!" onclick="f2()">';
}
function f2 () {
document.getElementById("pass").innerHTML = '<input type="password" id="pass_field">';
document.getElementById("pass_field").focus();
}
</script>
</head>
<body onLoad="f1()">
<form>
<div id="pass"></div>
</form>
</body>
</html>

Link to comment
Share on other sites

  • 0

Еще вариант "на коленке":

<!doctype html>

<title>Login form</title>

<style type="text/css">

label { position: relative; float: left; width: 100px; line-height: 20px; margin: 0; padding: 2px; }

label input { position: absolute; width: 100px; height: 20px; top: 0; left: 0; background: transparent; }

</style>

<script type="text/javascript">

function enter(obj) { obj.style.background='#fff'; }

function leave(obj) { obj.style.background=(obj.value.length)?'#fff':''; }

</script>

<form>

<p>

<label>Login <input type="text" name="login" onfocus="enter(this)" onblur="leave(this)"></label>

<label>Password <input type="password" name="passw" onfocus="enter(this)" onblur="leave(this)"></label>

<input type="submit" value="login">

</p>

</form>

Если бы не IE7-, вместо ф-ции enter(obj) можно было бы обойтись псевдоклассом input:focus. Плюс была попытка подобие graceful degradation при отключении стилей...

Упс, поторопился. В IE7 код все равно глючит, а в IE6 почему-то вообще ввод сломался :(. Приношу извинения.

Edited by SelenIT
Link to comment
Share on other sites

  • 0

 <style type="text/css">  
.hiddenBlock { display: none }
</style>
<input type="text" onfocus="this.className='hiddenBlock'; this.nextSibling.className=''; this.nextSibling.focus();" value="Pass"><input type="password" onblur="if( this.value == ''){ this.className='hiddenBlock'; this.previousSibling.className='' }" value="" class="hiddenBlock">

:)

Link to comment
Share on other sites

  • 0
м... пытаюсь представить. если блок поверх, то придется 2 раза кликать - чтобы убрать, и чтобы попасть мышкой в инпут. а если к фокусу притвязываться, то, наверное, вообще не получится. как инпут получит фокус, если поверх лежит блок?

Если кликнуть по блоку - убираем его и передаем фокус полю ввода.

Иначе оно может получить фокус, например, по табуляции с предыдущего поля ввода.

Но я сам не считаю это решение хорошим.

Link to comment
Share on other sites

  • 0

Одна из ошибок мышления большинства отписавшихся заключается в том, что все пытаются решить задачу с исходными данными. А ведь намного легче решать задачу, если изменить исходные данные, и тогда решение может быть куда лучше, проще для изменений, иметь меньше багов и глюков.

Link to comment
Share on other sites

  • 0
Одна из ошибок мышления большинства отписавшихся заключается в том, что все пытаются решить задачу с исходными данными. А ведь намного легче решать задачу, если изменить исходные данные, и тогда решение может быть куда лучше, проще для изменений, иметь меньше багов и глюков.

Совершенно согласен. Поэтому и сказал, что не считаю свой вариант удачным.

Из предложенных, кстати, мне понравился своей простотой вариант со словом на фоновом изображении.

Link to comment
Share on other sites

  • 0
 <style type="text/css">  
.hiddenBlock { display: none }
</style>
<input type="text" onfocus="this.className='hiddenBlock'; this.nextSibling.className=''; this.nextSibling.focus();" value="Pass"><input type="password" onblur="if( this.value == ''){ this.className='hiddenBlock'; this.previousSibling.className='' }" value="" class="hiddenBlock">

:)

шикарно!!! спасибо огромное :)))

вариант с фоновой картинкой красив, но этот, ИМХО, универсален - нужный эффект и при отключенных картинках.

всем большое спасибо за помощь, что бы я без вас делала :) *растеклась и впиталась от чЮЙств* :)

Link to comment
Share on other sites

  • 0
Совершенно согласен. Поэтому и сказал, что не считаю свой вариант удачным.

Из предложенных, кстати, мне понравился своей простотой вариант со словом на фоновом изображении.

Он хорош, но, к сожалению, требует кучу ручной работы. Не получится играться размером текста. Когда будет необходимо фоновое изображение для инпута, его нельзя будет вставить.

Но он прост. Это плюс. :)

Link to comment
Share on other sites

  • 0

ой, и правда. Пропустила, потому что не ожидала от вас готового решения.

Решение конечно компактное, но на мой взгляд сложное к восприятию. Придумаю проще - напишу.

Link to comment
Share on other sites

  • 0

Вот ребята, обратите обратите внимание какая красота, пользуйте наздоровье, тут все четко, все как надо!

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

<style type="text/css">
body {
font-size: 1em;
font-family: arial,helvetica,sans-serif;
}

form#login {
padding: 6px;
position: relative;
border: 1px solid grey;
}

div#username, div#password {
position: relative;
float: left;
margin-right: 3px;
}

input#username-field, input#password-field {
width: 10em;
}

label.overlabel {
color: #999;
}

label.overlabel-apply {
position: absolute;
top: 3px;
left: 5px;
z-index: 1;
color: #999;
}
</style>

<script type="text/javascript">
function initOverLabels () {
if (!document.getElementById) return;
var labels, id, field;
labels = document.getElementsByTagName('label');
for (var i = 0; i < labels.length; i++) {
if (labels[i].className == 'overlabel') {
id = labels[i].htmlFor || labels[i].getAttribute('for');
if (!id || !(field = document.getElementById(id))) {
continue;
}
labels[i].className = 'overlabel-apply';
if (field.value !== '') {
hideLabel(field.getAttribute('id'), true);
}
field.onfocus = function () {
hideLabel(this.getAttribute('id'), true);
};
field.onblur = function () {
if (this.value === '') {
hideLabel(this.getAttribute('id'), false);
}
};
labels[i].onclick = function () {
var id, field;
id = this.getAttribute('for');
if (id && (field = document.getElementById(id))) {
field.focus();
}
};
}
}
};
function hideLabel (field_id, hide) {
var field_for;
var labels = document.getElementsByTagName('label');
for (var i = 0; i < labels.length; i++) {
field_for = labels[i].htmlFor || labels[i].getAttribute('for');
if (field_for == field_id) {
labels[i].style.textIndent = (hide) ? '-1000px' : '0px';
return true;
}
}
}
window.onload = function () {
setTimeout(initOverLabels, 50);
};
</script>

</head>
<body>

<form id="login" action="#" method="post">
<div id="username">
<label for="username-field" class="overlabel">Логин</label>
<input id="username-field" type="text" name="username" title="Username" value="" tabindex="1">
</div>
<div id="password">
<label for="password-field" class="overlabel">Пароль</label>
<input id="password-field" type="password" name="password" title="Password" value="" tabindex="2">
</div>
<div id="submit">
<input type="submit" name="submit" value="Войти!" tabindex="3">
</div>
</form>

</body>
</html>

(Всем удачи.)

Link to comment
Share on other sites

  • 0
Вот ребята, обратите обратите внимание какая красота, пользуйте наздоровье, тут все четко, все как надо!

Очень красиво! Здорово :)))

Забираю в копилочку :))))))))))) Спасибо!

Link to comment
Share on other sites

  • 0

if (labels[i].className == 'overlabel') 
...
labels[i].className = 'overlabel-apply';

А если понадобится использовать больше классов для лейбла?

window.onload = function () {
setTimeout(initOverLabels, 50);
};

А если мне нужно будет на странице использовать еще какие-то функции, которые будут загружаться по onload'у?

Link to comment
Share on other sites

  • 0
А если понадобится использовать больше классов для лейбла?

А если мне нужно будет на странице использовать еще какие-то функции, которые будут загружаться по onload'у?

Ну если понадобится, то надо взять и сделать.

Ведь что требовалось то и представленно.

Link to comment
Share on other sites

  • 0
А если понадобится использовать больше классов для лейбла?

А если мне нужно будет на странице использовать еще какие-то функции, которые будут загружаться по onload'у?

1. Расширяется условие if и все...

2. А что мешает прописать эти функции в событии?!

window.onload = function () {
setTimeout(initOverLabels, 50);
oneMoreFunction();
otherFunction();
};

Link to comment
Share on other sites

  • 0
Ну если понадобится, то надо взять и сделать.

Ведь что требовалось то и представленно.

А можно сделать одну функцию, которая будет проверять наличие имени класса среди всей строки className, что уберет кучу дальнейших проблем с переделками.

1. Расширяется условие if и все...

Отлично придумано! И при каждом чихе вы будете переписывать функцию? Отличный подход!

2. А что мешает прописать эти функции в событии?!

window.onload = function () {
setTimeout(initOverLabels, 50);
oneMoreFunction();
otherFunction();
};

Если брать статический HTML, то ничего. Если брать генерируемый сервером код, то решение явно неудобное. Чтобы подключить модуль, который будет требовать обработчика onload события, потребуется или специальный модуль наполнения этого обработчика, или ручной труд. Это дополнительная и никому не нужная работа. Этого можно избежать.

Link to comment
Share on other sites

  • 0

Один из выходов это расположить в самом конце скрипт вызова нужной ф-ии. тогда он сработает только после того как загрузиться все содержимое страницы. Есть еще какой-то способ через прописывание эвента, но я его не помню.

Link to comment
Share on other sites

  • 0
Один из выходов это расположить в самом конце скрипт вызова нужной ф-ии. тогда он сработает только после того как загрузиться все содержимое страницы. Есть еще какой-то способ через прописывание эвента, но я его не помню.

Первый способ используется тогда, когда во втором не нужно соблюдать порядок вызова функций.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy