динамически делать событие onClick? - PullRequest
0 голосов
/ 08 августа 2011

Я понимаю, что подобная проблема была задана здесь Javascript - Динамически назначать событие onclick в цикле , но я думаю, что я был немного смущен и не мог добавить комментарий.

Я делаю серию div динамически, в массиве "newdiv". Я хочу создать функцию onClick, которая расширит offsetHeight до scrollHeight.

Я пытаюсь сделать это в цикле for следующим образом:

newdiv[i].onclick = function() {expandThis(message_id) };

Где

message_id = message_array[i][0];

(столбец id в массиве, в сообщении 'i')

Проблема знакома - все сделанные клики ссылаются на последний message_id. Есть ли простой способ заставить onClick для newdiv [i] обращаться к message_array [i] [0]?

Ответы [ 3 ]

1 голос
/ 08 августа 2011

Вы можете использовать анонимную функцию для создания замыкания, содержащего значение, на которое нужно сослаться.

function(message_id) {
  newdiv[i].onclick = function() {expandThis(message_id) };
}(message_array[i][0]);

JavaScript - это функциональный язык программирования без оператора let . Таким образом, вы должны написать эквивалентное закрытие, как бы ужасно это не выглядело.

0 голосов
/ 08 августа 2011

Вам нужно прервать закрытие с помощью message_id:

newdiv[i].onclick = (function(id) {
                       return function() {expandThis(id) };
                    }(message_id));

Существует миллион таких вопросов, как, например, Задайте при javascript Проблема .

0 голосов
/ 08 августа 2011

вы можете динамически создавать код javascript и сохранять его в var, а затем использовать функцию evalute () и присваивать результат обратному вызову onclick.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...