我意识到这里有一个类似的问题Javascript - Dynamically assign onclick event in the loop,但我觉得我有点困惑,无法添加评论。
我在一个数组“newdiv”中动态制作一系列div。 我想创建一个onClick函数,它将offsetHeight扩展为scrollHeight。
我正试图在我的for循环中这样做:
newdiv[i].onclick = function() {expandThis(message_id) };
哪里
message_id = message_array[i][0];
(数组中的id列,消息'i')
问题很熟悉 - 所有onClicks都是指最后一个message_id。 是否有一种简单的方法可以使onClick for newdiv [i]引用message_array [i] [0]?
答案 0 :(得分:1)
您可以使用匿名函数创建一个闭包以包含要引用的值。
function(message_id) {
newdiv[i].onclick = function() {expandThis(message_id) };
}(message_array[i][0]);
JavaScript是一种函数式编程语言,没有 let 语句。所以你必须编写等效的闭包,看起来很难看。
答案 1 :(得分:0)
您可以动态创建javascript代码并存储在var中,然后使用evalute()函数并将结果分配给onclick回调。
答案 2 :(得分:0)
您需要使用message_id打破闭包:
newdiv[i].onclick = (function(id) {
return function() {expandThis(id) };
}(message_id));
有一百万个像这样的问题,例如Do while javascript Problem