Передача массива javascript в функцию из свойства onclick - PullRequest
0 голосов
/ 31 января 2019

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

Что-то не работает, так как я получаю универсальный "неожиданный идентификатор "ошибка в консоли при нажатии на кнопку";если я заменяю массив строкой или числом, скрипт работает, означая, что в моем способе передачи массива или в самом массиве должно быть что-то не так.

Вот как выглядит вывод html кнопок (почему существует два [объекта объекта]?):

<button onclick="myFunction(1,'string',{[object Object],[object Object]})">Click me</button>

Сгенерировано из

var button = '<button onclick="myFunction('+otherArray.value1+',\''+otherArray.string1+'\',{'+myArray+'})">Click me</button>';

Вот как выглядит массив в консоли Chrome непосредственно перед генерацией кнопок:

(2) [{…}, {…}]
0: {param1: "1", param2: "text"}
1: {param1: "2", param2: "more text"}
length: 2
__proto__: Array(0)

Есть предложения?Спасибо

1 Ответ

0 голосов
/ 31 января 2019

Причина, по которой вы видите [object Object], заключается в том, что для того, как вы присваиваете onclick, для этих значений будет вызван метод toString, поэтому на выходе будет [object Object].

Первое предложениеЯ мог бы вам сказать, что в этих случаях, когда вы должны назначать такие атрибуты, используйте addEventListener вместо создания жестко закодированного элемента таким способом.

Так что в вашем случае что-то вроде:

var button = document.createElement("button");        
var t = document.createTextNode("Click me");
button.appendChild(t);
button.addEventListener('click', () => {
  myFunction(otherArray.value1, otherArray.string1, { myArray });
});
// then append the button where you want to 
...