Использование.live/.bind в jQuery для воздействия на ввод, созданный циклом for
У меня есть два массива, один с именами входов и один со значением для каждого ввода. Имеется 7 входов, поэтому я сделал цикл для заполнения каждого ввода его значением, затем сделал так, чтобы текст исчезал при фокусировке этого ввода, и восстанавливал текст исходного значения, если ничего не было напечатано. Можно ли это сделать через цикл с помощью jQuery? Мне кажется.live и.bind не будут работать для этой цели. Придется ли мне делать хардкор в каждом событии фокусировки и размытия?
for (var i=0;i<7;i++) {
$('#user_' + input_names[i]).attr('value', default_values[i]);
$('#user_' + input_names[i]).live("blur", function(){
if(this.value == '')this.value=default_values[i];
});
$('#user_' + input_names[i]).live("focus", function(){
if(this.value == default_values[i])this.value='';
});
}
Обновите здесь, выпуская массивы, как просил Эрик:
var input_names = ['username', 'password'];
var default_values = ['Username', 'Password'];
for (var i=0;i<2;i++) {
$('#user_' + input_names[i]).attr('value', default_values[i]);
$('#user_' + input_names[i]).blur(function(){
if(this.value == '')this.value=default_values[i];
});
$('#user_' + input_names[i]).focus(function(){
if(this.value == default_values[i])this.value='';
});
}
1 ответ
Похоже, вы ищете HTML5 placeholder
приписывать. Просто измените ваш HTML на это:
<input id="user_username" placeholder="Username" />
<input id="user_password" placeholder="Password" />
Если вам нужна обратная совместимость, для этого есть плагин jQuery. Со ссылкой на плагин, просто сделайте это:
$('input[placeholder]').placeholder();
Что касается того, что не так с вашим исходным кодом, я подозреваю, что есть проблема закрытия, и i
сохраняет значение 7. Вы бы лучше переписать его так:
var inputDefaults = {username: 'Username', password: 'Password'};
$.each(inputDefaults, function(field, defaultValue) {
$('#user_' + field)
.attr('value', defaultValue);
.blur(function() {
if($(this).val() == '')
$(this).val(defaultValue);
})
.focus(function(){
if($(this).val() == defaultValue)
$(this).val('');
});
});