首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

js 闭包有关问题

2012-03-16 
js 闭包问题还是老问题,循环给元素添加事件,事件是添加上了,但是好像只有循环的最后一个元素有效,找了好多

js 闭包问题
还是老问题,循环给元素添加事件,事件是添加上了,但是好像只有循环的最后一个元素有效,找了好多参考,但是还是没解决,请大家帮帮忙...先谢了...

JScript code
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;    }}


虽然知道是闭包问题,但是不知道怎么改...

[解决办法]
你这代码不对 container 根本没用到
[解决办法]
addEventHandler(item_box, "click", (function(i) {
return function(){ alert(i);};
})(i););

[解决办法]
是不以前创建的item_box被后来创建的给覆盖了
[解决办法]
除了 addEventHandler(item_box, "click", function() {
alert(i);
});

其他没有闭包问题~

热点排行