【发布时间】:2011-06-08 17:19:50
【问题描述】:
我有两个数组,一个带有输入名称,一个带有每个输入的值。有 7 个输入,所以我做了一个循环来用它的值填充每个输入,然后让它在输入焦点时文本会消失,如果没有输入任何内容,则恢复原始值文本。这可以通过 jQuery 循环来实现吗?在我看来 .live 和 .bind 不适用于此目的。我是否必须在每个输入事件 focus&blur 事件中进行硬核?
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='';
});
}
在此处更新,按照 Eric 的要求释放数组:
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='';
});
}
【问题讨论】:
-
#user_...元素是动态生成的吗?我们能看到生成它们的代码吗? -
#user_ 是输入名称的前缀。它们是这样的:#user_username、#user_... 等等。不是整数。
-
这不能回答我的问题。如果您向我们展示生成它们的代码,事情可以大大简化。为什么在生成处理程序时不能附加处理程序?
-
抱歉,
inputs不是由 for 循环创建的,只是事件绑定?这就是我读标题的方式。
标签: javascript jquery events for-loop delegation