读书人

js 闭包有关问题

发布时间: 2012-03-16 16:34:56 作者: rapoo

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);
});

其他没有闭包问题~

读书人网 >JavaScript

热点推荐