Создание глобального массива 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);
});
... тогда другие ваши функции должны иметь к нему доступ.