У меня была похожая проблема, когда у меня в качестве меток было Значение входных данных, и когда вы щелкали внутри одного из них, запускался какой-то Javascript, очищая входные данные.Но в поле пароля вам нужно было изменить тип ввода с «текст» на «пароль», который работает в браузерах, таких как Safari или Firefox, но не в IE (IE не очень хорошо поддерживает функцию setAttribute).Поэтому я убивал себя, пытаясь понять, как лучше всего это сделать (условные выражения IE и т. Д.)
Я нашел эту ветку, и я думаю, что Квентину пришла лучшая идея.Не только потому, что он работает и должен работать во всех браузерах, но также обеспечивает фактическую метку в коде, что, за исключением Screenreaders, является хорошей практикой.Кроме того, вы всегда должны учитывать тех, кто использует программы чтения с экрана в некоторой степени.
Вот основы решения: HTML:
<label>Enter Password
<input type="password" name="password" class="input" /></label>
JQuery (примечание: я не jQueryэксперт. Вероятно, это можно было бы написать лучше или эффективнее, но для двух полей это работает):
$("input[name=password]").focus(function() {
var value = $("input[name=password]").val();
if(value == "") {
$(this).toggleClass("inputBg");
}
});
$("input[name=password]").blur(function() {
var value = $("input[name=password]").val();
if(value == "") {
$(this).toggleClass("inputBg");
}
});
CSS начинается с тега Label, стилизованного так же, как ваш входной класс, с позицией относительнои добавлен блок отображения.Тогда есть два класса для ввода.Тот, который имеет правильную ширину, высоту и т. Д., Позиционируется абсолютно, с более высоким z-индексом, чем метка, НО БЕЗ ФОНА.Второй класс точно такой же, но с фоном.
JQuery просто переключается между двумя классами, поэтому вы увидите метку под вводом, но когда вы нажмете на ввод, появится фон, и вы сможете ввести текст поверх него.Прекрасно работает, должен работать во всех браузерах (хотя проверено только в Safari на Mac и IE / Firefox на Windows).Отличная идея, Квентин!