JS闭包问题,循环添加事件,只有最后一个

百度了一下午实在是解决不了了。。求大神!JS实现把DIV中字体展开收起的效果,循环给RIGHT_DIV进行修改,先判断长度进行截取,这块没问题,之后给该DIV增加点击事件... 百度了一下午 实在是解决不了了。。求大神!
JS实现把DIV中字体展开 收起的效果,循环给RIGHT_DIV进行修改,先判断长度进行截取,这块没问题,之后给该DIV增加点击事件,总是最后一个成功 其他不行。
代码如下,

//判断截取
var o = document.getElementsByName("right_div");
for ( var i = 0; i <= o.length; i++) {
var s = o[i].innerHTML;
var p = document.createElement("span");
var n = document.createElement("a");
if (s.length > 30) {
p.innerHTML = s.substring(0, 30);
n.innerHTML = "...展开";
o[i].appendChild(p);
o[i].appendChild(n);
} else {
p.innerHTML = s;
n.innerHTML = "";
o[i].appendChild(p);
o[i].appendChild(n);
}
//添加事件
this.onclick = function() {
if (n.innerHTML == "...展开") {
n.innerHTML = "收起";
p.innerHTML = s;
} else if(n.innerHTML == "收起"){
n.innerHTML = "...展开";
p.innerHTML = s.substring(0, 30);
}
}
}
展开
 我来答
百度网友46b235f5b2
2014-07-04 · TA获得超过1397个赞
知道小有建树答主
回答量:676
采纳率:100%
帮助的人:625万
展开全部
o[i].onclick = (function(n1,p1,s1){
    if (n1.innerHTML == "...展开") {
    n1.innerHTML = "收起";
    p1.innerHTML = s;
    } else if(n1.innerHTML == "收起"){
    n1.innerHTML = "...展开";
    p1.innerHTML = s1.substring(0, 30);
    }
})(n,p,s)
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
me...9@yeah.net
2014-07-04 · 超过16用户采纳过TA的回答
知道答主
回答量:65
采纳率:0%
帮助的人:42.3万
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式