动态制作onClick事件?

时间:2011-08-08 09:04:17

标签: javascript onclick

我意识到这里有一个类似的问题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]?

3 个答案:

答案 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

相关问题