Создание глобального массива JavaScript со статическими элементами?

Создание глобального массива JavaScript со статическими элементами?

2 ответа

Решение

Проблема не в том removeFunction не имеет доступа к bigArray, Проблема в вашем onclick атрибут, а id Вы кладете на ссылку:

$('#div').append("<a href='#' id='bigArray[i]' onclick='removeFunction(bigArray[i])'>Element bigArray[i]</a><br />");

в onclickВы имеете в виду i, а) я догадываюсь i не является глобальным, и Б) Даже если это так, он не будет иметь значения i что вы использовали для визуализации этой строки. Код будет искать значение глобального i переменная с момента нажатия на ссылку.

Отдельно вы создаете несколько элементов с одинаковыми id значение, которое bigArray[i] (не bigArray[0], bigArray[1], так далее.)

Вместо этого вы можете использовать значение, например так:

$('#div').append("<a href='#' id='bigArray[" + i + "]' onclick='removeFunction(" + i + ")'>Element bigArray[i]</a><br />");

Изменения там:

  • Для idЯ изменил это на: "...id='bigArray[" + i + "]'", который будет выводить id='bigArray[0]', затем id='bigArray[1]'и т. д. вместо многократного вывода id='bigArray[i]' (в прямом смысле.

  • Я просто передаю индекс в removeFunctionопять же, поместив туда значение, а не ссылку на переменную i: "... onclick='removeFunction(" + i + ")' ..."

Тогда ваш removeFunction было бы:

function removeFunction(i) {    // <== i, not id
    bigArray.splice(i, 1);      // <== real code, not pseudocode
    renderArray(bigArray);
}

Я бы не рекомендовал делать это таким образом, но это минимальное исправление.

Там нет необходимости проходить bigArray ни к чему. Это глобальный.


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

Сначала определите переменную в глобальной области видимости, которая будет содержать ваш "bigArray", а затем присвойте ей значение, как только вы получите данные посредством вызова ajax.

var bigArray;

$.ajax({
    bigArray = bigArrayFromAjax;
    renderArray(bigArray);
});

... тогда другие ваши функции должны иметь к нему доступ.

Другие вопросы по тегам