0

Задача простая. У меня есть таблица которая в свою очередь отрисовывается JS кодом. Во время вставки элемента в таблицу я сначала всей строке присваиваю функцию, ну типа нажал на строку и можно редактировать. Для начала просто дебажу и тут проблема, она у меня постояно перезаписывается и в итоге у всех функция последнее значение. Как мне навсегда оставить каждой строке неизменное значение.

введите сюда описание изображения

FX_Sektor
  • 699
  • 7
  • 22
  • @Grundy Заголовок дубликата может ввести в заблуждение, поэтому стоит еще добавить, что в данном случае дело вовсе не в асинхронщине, а в разнице между var и let. :) – Yaant Nov 13 '18 at 13:46
  • я если честно в дубликате пересмотрел и попробывал пару вариантов...не работает – FX_Sektor Nov 13 '18 at 13:51
  • @Yaant, разница именно в асинхронщине: функция создаваемая внутри цикла не выполняется сразу, а выполняется асинхронно – Grundy Nov 13 '18 at 14:00
  • да, но оно всегда перезаписывает значения...я пытался сделать как в дубликате..и нифига не выходит – FX_Sektor Nov 13 '18 at 14:03
  • @Grundy А, соглашусь. :) Смутило, что в дубликате эта функция в цикле же и вызывается, а тут нет. :) – Yaant Nov 13 '18 at 14:03
  • @FX_Sektor, тогда надо смотреть как именно ты пытался :-) – Grundy Nov 13 '18 at 14:07
  • @FX_Sektor А замените var qqq = ... на let qqq = .... Правда, в IE это не поможет, но по крайне мере должно подтолкнуть в нужную сторону. – Yaant Nov 13 '18 at 14:07
  • Обновил ответ. ПР – Саске Nov 13 '18 at 14:21
  • @Yaant, в дубликате, кстати, вызывается setTimeout, а не функция :-) – Grundy Nov 13 '18 at 14:26
  • @Grundy setTimeout - это тоже функция! :) – Yaant Nov 13 '18 at 14:28
  • @Yaant, но не та, которая создается :) – Grundy Nov 13 '18 at 14:29
  • @Grundy Это уже детали. :) – Yaant Nov 13 '18 at 14:30
  • Никого не смущает строчка var obj = $.parseJSON(data); в обработчике $.getJSON? –  Nov 13 '18 at 15:02
  • $.getJSON это асинхронный метод к контроллеру...он всего лишь вернет обект но не десериализует его...дальше я его десиарилизую в методе $.parseJSON(data)...иначе он будет сплошной большой строкой... – FX_Sektor Nov 13 '18 at 15:05

1 Answers1

0
///копируеш его
const arg = Object.assign({}, source) //source то откуда копируем;
//передаем 
func(arg);

Если правильно понял то вы хотите что то типа такова

   fetch('https://reqres.in/api/users')
.then(response => {
    return response.json();
}).then(json => { 
    const N = json.data;
    const table = document.getElementById('table');
    for (const Q of N) {
        let row = document.createElement('tr');
        row.innerHTML = `${Q.first_name} ${Q.last_name}`;
        row.id = `${Q.id}`;
        row.onclick = (event) => {
            alert(`Вы выбрали id = ${Q.id}`);
        }
        table.append(row);
    }
})
Саске
  • 1,326
  • 13
  • 23
  • Попробывал вот так. http://prntscr.com/lhtsf6 но тогда в алерт приходит с [Object; object] я пыталс десериализовать его методом pareseJSON не прокатило..та он наверно и не джейсон. Пробывал простое значение передать стринговое...но тоже самое – FX_Sektor Nov 13 '18 at 13:31
  • у меня сейчас вот так на выходе. http://prntscr.com/lhurr4 А хочу что б на выходе было вот так агрменты в функцию я наглядно тут поставил. Туда должны передаваться содержимое своей строки. Просто добавить каждой строке функцию в которую передается содержимое своей жи строки – FX_Sektor Nov 13 '18 at 14:37
  • ну тогда мой варинт вам подходит – Саске Nov 13 '18 at 14:41
  • у вас onclick="function(obj[0].Id)" где добавляется? – Саске Nov 13 '18 at 14:42
  • Я его хотел добавить в цикле...как на картинке в самом начале публикации вопроса. Но он начал постояно перезаписываь инфу и в итоге функция всюда передавала последнее значение – FX_Sektor Nov 13 '18 at 14:44
  • Ну прогрес с вашей помощью есть http://prntscr.com/lhv487 Буду дальше дебажить..как закончу полность - отпишусь и ответ помечу правильно....ксати и когда еще уменьшилось в разы – FX_Sektor Nov 13 '18 at 14:58
  • я не правильно код написал. я исправил он рабочий – Саске Nov 13 '18 at 14:58