A.N*_*lam 0 javascript forms jquery events bind
HTML:
<input id="email" name="email" type=text />
<input id="password name="password" type="password" />
Run Code Online (Sandbox Code Playgroud)
JavaScript的:
var fields = ["email","password"];
for (var i in fields) {
var field = $("#"+fields[i]);
field.bind({
focus: function() {
field.css("border-color","#f00");
},
blur: function() {
field.css("border-color","#000");
}
});
}
Run Code Online (Sandbox Code Playgroud)
我的愿望行动如下:
但是,只有密码存档才会发生该事件,无论我放置光标还是从上述任何字段中删除光标.
这是一个非常常见的问题,在和事件field上访问的变量属于外部作用域,因此它包含最后一个迭代值,在您的情况下它将包含.focusblur"password"
有很多方法可以解决这个问题,例如你可以使用$.each它来引入一个新的范围:
jQuery.each(["email", "password"], function(index, fieldId) {
var field = $('#'+fieldId);
field.bind({
focus: function() {
field.css("border-color","#f00");
},
blur: function() {
field.css("border-color","#000");
}
});
});
Run Code Online (Sandbox Code Playgroud)
或者使用$(this)而不是field在事件处理程序中,即:
var fields = ["email","password"];
for (var i = 0; i < fields.length; i++) {
$("#"+fields[i]).bind({
focus: function() {
$(this).css("border-color","#f00");
},
blur: function() {
$(this).css("border-color","#000");
}
});
}
Run Code Online (Sandbox Code Playgroud)
偏离主题的说明:在上面的例子中,我使用了一个普通循环,而不是for...in语句,它实际上并不是用在类似数组的对象上.
在这里试试这两个代码示例.