还是老问题,循环给元素添加事件,事件是添加上了,但是好像只有循环的最后一个元素有效,找了好多参考,但是还是没解决,请大家帮帮忙...先谢了...
function test() {
var container = document.createElement("ul");
for (var i = 0; i < 10; i++) {
// 循环创建子元素,并为子元素添加事件
var item_box = document.createElement("li");
item_box.innerHTML = i; // 调用addEventHandler方法添加事件
addEventHandler(item_box, "mouseover", function() {
addClass(item_box, "hover");// 调用addClass方法添加class
});
addEventHandler(item_box, "mouseout", function() {
removeClass(item_box, "hover");
});
addEventHandler(item_box, "click", function() {
alert(i);
});
}
}function addEventHandler(tatget, eventName, handler) {
if (tatget.addEventListener) {
tatget.addEventListener(eventName, handler, false);
} else if (tatget.attachEvent) {
tatget.attachEvent("on" + eventName, handler);
} else {
tatget["on" + eventName] = handler;
}
}function addClass(target, name) {
if (!hasClass(target, name)) {
target.className += " " + name;
}
}虽然知道是闭包问题,但是不知道怎么改...
function test() {
var container = document.createElement("ul");
for (var i = 0; i < 10; i++) {
// 循环创建子元素,并为子元素添加事件
var item_box = document.createElement("li");
item_box.innerHTML = i; // 调用addEventHandler方法添加事件
addEventHandler(item_box, "mouseover", function() {
addClass(item_box, "hover");// 调用addClass方法添加class
});
addEventHandler(item_box, "mouseout", function() {
removeClass(item_box, "hover");
});
addEventHandler(item_box, "click", function() {
alert(i);
});
}
}function addEventHandler(tatget, eventName, handler) {
if (tatget.addEventListener) {
tatget.addEventListener(eventName, handler, false);
} else if (tatget.attachEvent) {
tatget.attachEvent("on" + eventName, handler);
} else {
tatget["on" + eventName] = handler;
}
}function addClass(target, name) {
if (!hasClass(target, name)) {
target.className += " " + name;
}
}虽然知道是闭包问题,但是不知道怎么改...
解决方案 »
- fusioncharts free挡住extJS的日期控件datefield
- "小方块怎么用正则去掉"?
- ie8下图片预览问题?
- 关于SwfObject的问题
- Ext 用那个版本不要钱?Gxt要钱么?
- 紧急:经过Yahoo YUICompressor压缩的js代码如何在浏览器执行啊?
- 他为什么可以直接调用网页上的JS函数?
- JS里的this...?疑惑!
- 用showModalDialog打开一个jsp,数据怎么处理
- 新人自学javascript,有关于函数的属性和方法
- editor.js问题 ie6下正常 ie7 ie8 google上点击工具栏就自动把文本域关闭起来
- 像这样的代码要怎么通过PHP来实现?
return function(){ alert(i);};
})(i););
不好意思,没复制完,漏了两句,因为我那个方法很长,我只是复制一部分...function test() {
var container = document.createElement("ul");
for (var i = 0; i < 10; i++) {
// 循环创建子元素,并为子元素添加事件
var item_box = document.createElement("li");
item_box.innerHTML = i; // 调用addEventHandler方法添加事件
addEventHandler(item_box, "mouseover", function() {
addClass(item_box, "hover");// 调用addClass方法添加class
});
addEventHandler(item_box, "mouseout", function() {
removeClass(item_box, "hover");
});
addEventHandler(item_box, "click", function() {
alert(i);
});
container.appendChild(item_box);
}
document.appendChild(container);
}
alert(i);
});其他没有闭包问题~
那为什么无论我把鼠标移到哪个li上面,都是最后一个li添加了hover的class名呢?而不是移在上面的那个li呢?