Поняв, что мое оригинальное решение не будет работать, я потратил некоторое время, пытаясь придумать рабочее решение просто из любопытства. Я бы по-прежнему рекомендовал использовать плагин jQuery eKek0 , так как он ухудшается лучше.
Следующий пример довольно гибкий. Вместо того, чтобы жестко кодировать теги замены <input />
в виде строк, теги замены выводятся из исходных тегов. Это помогает, если атрибуты тега <input />
изменены, поскольку вы не потеряете стили или другие атрибуты, присвоенные тегам.
Следующее решение было протестировано в Chrome, Firefox, IE8 и IE8 в режиме совместимости с IE7.
$(document).ready(function() {
var focusEvent = function() {
if(this.type == 'text') {
var html = $(this).clone().wrap('<span></span>').parent().html();
html = html.replace(/type=("|')?text("|')?/, 'type="password"');
var $newPwdBx = $(html);
$(this).replaceWith($newPwdBx);
$newPwdBx.removeClass('readOnly');
$newPwdBx.val('');
$newPwdBx.focus();
$newPwdBx.blur(blurEvent);
}
};
var blurEvent = function() {
if(this.value == '') {
var html = $(this).clone().wrap('<span></span>').parent().html();
html = html.replace(/type=("|')?password("|')?/, 'type="text"');
var $newTxtBx = $(html);
$(this).replaceWith($newTxtBx);
$newTxtBx.addClass('readOnly');
$newTxtBx.val('password');
$newTxtBx.focus(focusEvent);
}
};
$("#password").focus(focusEvent);
});
Этот код заменяет <input />
соответствующим типом размытия и фокусировки. Он также добавляет / удаляет класс для стилизации текста-заполнителя «пароль», чтобы его было удобнее использовать, поскольку текст-пароль «заполнитель» не является черным цветом по умолчанию, что потенциально может вводить пользователя в заблуждение.
Вы можете увидеть это здесь: http://jsbin.com/azugu