Надпись в поле ввода password
Вложений: 1
Все никак не приходилось самому сделать такую штутку, вот сейчас спросили каким образом это можно реализовать, получился такой вариант:
CSS: .field { position: relative; } .field label { position: absolute; top: 2px; left: 3px; } .field label.hidden { left: -9999px; } javascript: window.onload = function () { var input = document.getElementById("pwd"); var label = input.parentNode.getElementsByTagName("label")[0]; if (!input.value) { label.className = ""; } input.onfocus = function () { label.className = "hidden"; }; input.onblur = function () { if (!input.value) { label.className = ""; } }; }; HTML: <form action=""> <fieldset> <div class="field"> <label for="pwd" class="hidden">Enter password</label> <input id="pwd" type="password" /> </div> </fieldset> </form> |
Цитата:
Решение: постоянно по таймауту проверять, не произошло ли чего с полями. А focus/blur остаются, чтобы запоминать состояние фокуса. |
Хм… фокс пароли до window.onload подставляет, а я потом проверку делаю:
if (!input.value) { label.className = ""; } Поэтому работает. Вот в IE действительно косяк, он подставляет пароль после выбора логина из выпадающего списка. Завтра поправлю, сделаю по таймауту. |
Вложений: 1
Исправленный вариант:
CSS: .field { position: relative; } .field label { position: absolute; top: 2px; left: 3px; } .field label.hidden { left: -9999px; } HTML: <form action=""> <fieldset> <div class="field"> <label for="pwd" class="hidden">Enter password</label> <input id="pwd" type="password" /> </div> </fieldset> </form> JаvaSсript: var input = document.getElementById("pwd"); var label = input.parentNode.getElementsByTagName("label")[0]; var active = false; function change() { label.className = input.value ? "hidden" : ""; } input.onfocus = function () { active = true; label.className = "hidden"; }; input.onblur = function () { active = false; change(); }; (function () { if (!active) { change(); } setTimeout(arguments.callee, 300); }()); Пример |
Цитата:
|
Увы, браузеры не оповещают о том что делают что-то с паролями и прочим автозаполнением.
setTimeout(arguments.callee, 300); Использование callee устарело с выходом ES5, использовать не рекомендуется. https://developer.mozilla.org/en-US/...guments/callee |
Часовой пояс GMT +3, время: 05:44. |