Ответ 1
Это работает:
$('label[for^="' + sd + '"]').fadeIn();
Попробуйте http://jsfiddle.net/hwJy8/
Я пытаюсь получить значение атрибута placeholder
и делаю fadeIn
с меткой, которая имеет значение placeholder
как значение for
, но не работает.
HTML:
<html>
<body>
<form>
<input type="text" id="name" name="name" placeholder="First Name" />
<label for="First Name">First Name </label>
</form>
</body>
</html>
CSS:
input+label { display: none; }
Script
$(document).ready(function() {
$('input[type="text"]').click(function() {
var sd = $(this).attr('placeholder');
$('label[for^=sd]').fadeIn();
});
});
Это работает:
$('label[for^="' + sd + '"]').fadeIn();
Попробуйте http://jsfiddle.net/hwJy8/
Вы выбираете буквенную строку "sd", а не значение вашей переменной. Попробуйте следующее:
var sd = $(this).attr('placeholder');
$('label[for^="' + sd + '"]').fadeIn();
Вероятно, вы хотите:
$('label[for^="' + sd + '"]').fadeIn();
Вы также не используете <label for="...">
правильно [doc]. Атрибут for
для <label>
должен ссылаться на атрибут <input>
id
, а не на его атрибут placeholder
. Вероятно, вам будет интересно изменить код:
<label for="name">First Name</label>
и
var id = $(this).attr('id');
$('label[for^="' + id + '"]').fadeIn();
Если вы пытаетесь убрать местозаполнитель ввода, когда пользователь сфокусирован на нем, а затем снова появляется при удалении фокуса, это сработало хорошо.
$('#inputRanges input').on('focus', function(){
if(!$(this).data('placeholder')){
$(this).data('placeholder', $(this).attr('placeholder'));
}
$(this).attr('placeholder', "");
}).on('focusout', function(){
if($(this).val()==""){
$(this).attr('placeholder', $(this).data('placeholder'));
}
});
Я думаю, что ваша строка селектора для метки неверна $('label[for="'+sd+'"]').fadeIn();
Если метка всегда будет рядом с входом (как показывает селектор CSS), вы можете попробовать:
$(function(){
$(":text").bind("focus", function(){
$(this).next().fadeIn();
});
});
и вообще пропустить атрибут placeholder. Также привязка к "фокусу" может быть лучше, чем "click"