2017-02-23 45 views
0

Я новичок в кодировании, и я м искал способ для запуска конкретного метода прототипа для каждого объекта моего массива из сгенерированной кнопкиJS- Вызов метода из сгенерированной кнопки для конкретного объекта

I У меня есть данные json для цикла и включают каждый объект в массив js.

// Мои данные получили 3 объекта

var readArr = JSON.parse(myData) 

var js_arr = []; 

// цикл на массиве объекта метода

for (var i = 0; i < readArr.length; i++) { 

    var generatedObject = new Object(); 

// INIT от прототипа

generatedObject.init(readArr[i].prop1, readArr[i].prop2, readArr[i].prop3, readArr[i].prop4, readArr[i].prop5, 
      readArr[i].prop6, readArr[i].prop7, readArr[i].prop8); 

    js_arr.push(generatedObject); 

// генерируется div, который будет содержать кнопку для каждого входа

var newCntent = document.createElement('div'); 
    newCntent.id = readArr[i].prop1 + i; 
    newCntent.className = "cntent"; 
    document.getElementById('zone_btn').appendChild(newCntent); 

// создать кнопку внутри DIV

var newBtn = document.createElement('div'); 
    newBtn.id = i + readArr[i].prop1; 
    newBtn.className = "etalonBtn"; 
    newBtn.innerHTML = readArr[i].prop1; 
    document.getElementById(newCntent.id).appendChild(newBtn); 

У меня есть метод прототипа на моем классе Object и то, что я хочу запустить этот метод для каждого объекта, связанного с кнопкой. Первая сгенерированная кнопка запускает метод для js_arr [0], второй для js_arr [2], ... как закодировать факт, что при нажатии кнопки кнопка должна быть вызвана «объектом массив, который permetted вашего творения»

Я не имею никакого понятия о том, как я могу это сделать, я попробовал несколько вещей:

newBtn.addEventListener('click', function() { 

     read_arr[i].DisplayUpdate(); 
    }); 

}; 

(возвращение read_arr [я] не определен), так что я просто хотите изменить этот read_arr [i] на этом теперь знаменитом: «объект массива, который проницал ваше творение»! и мне очень нужна помощь в этом ...

Благодарим вас за ожидание и извините за этот дошкольный английский.

+0

Где вы установите слушатель событий? это внутри петли? – Shtut

+0

Да, это плохая идея? Концепция заключалась в том, чтобы сгенерировать кнопку со связанным событием onclick, но я не знаю, насколько это актуально ... –

ответ

0

Проблема в том, что когда вы получаете функцию щелчка (т. Е. При нажатии на кнопку), вы уже вышли из цикла, поэтому js не знает, что такое 'read_arr[i]'.

В качестве параметра к функции необходимо передать 'read_arr[i]'. В основном что-то вроде этого:

newBtn.addEventListener('click', function (object) { 
     object.DisplayUpdate(); 
    },js_arr[i]); 

Это изменит signiture функция, чтобы также принять параметрируемую object, а также передать js_arr[i] в качестве параметра.

Надежда, что помогает

+0

Сначала большое спасибо, а потом, я попробую! –

+0

Новая проблема сейчас, отладчик return: object.DisplayUpdate не является функцией, он, похоже, не распознал мой сгенерированный объект как похожий класс. –

+0

Я попытался запустить предупреждение о событии onclick, например alert (JSON.stringify (object)); и он возвращает мне {«Доверено»: true} вместо моего значения объекта, что это значит, пожалуйста? И снова я сожалею, поэтому я должен неправильно понять несколько вещей ... –

0

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

var newBtn = document.createElement('div'); 
    newBtn.id = i + readArr[i].prop1; 
    newBtn.className = "etalonBtn"; 
    newBtn.innerHTML = readArr[i].prop1; 
    newBtn.onclick = jsArr[i]; 
Смежные вопросы