我有10个文本框,但我想在5个元素上应用onkey和blur事件。
for(var x=3;x<7;x++){
document.getElementById("txt_"+x).onclick=function(){
put_contents(document.getElementById("txt_"+x));
};
document.getElementById("txt_"+x).onkeyup = function(){
validateHexa(document.getElementById("txt_"+x));
};
document.getElementById("txt_"+x).onblur = function(){
restore_it(document.getElementById("txt_"+x));
};
}
执行此操作后,当我单击文本框时,不是put_contents始终将“txt_7”作为参数。请建议正确的方法。仅限javascript
答案 0 :(得分:2)
你可以&#34;分离&#34;通过在循环内创建(nother)闭包来x
的值:
for (var x = 3; x < 7; x++) {
(function(x) {
document.getElementById("txt_" + x).onclick = function() {
put_contents(document.getElementById("txt_" + x));
};
document.getElementById("txt_" + x).onkeyup = function() {
validateHexa(document.getElementById("txt_" + x));
};
document.getElementById("txt_" + x).onblur = function() {
restore_it(document.getElementById("txt_" + x));
};
})(x);
}
有关详细信息,请参阅How do JavaScript closures work?