-5

创建一个带有静态元素的 JavaScript 全局数组?

4

2 回答 2

1

问题不在于removeFunction无法访问bigArray. 问题出在您的onclick属性中,并且id您正在链接上:

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

在 中onclick,您指的是i,但是 A)我猜i不是全局的,并且 B)即使是,它也不会具有i您用来呈现该行的值。代码将在单击链接时查找全局i变量的值。

另外,您正在创建具有相同id值的多个元素,即bigArray[i](not 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]', thenid='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,我建议重构,这样你就不必每次都重新渲染整个东西。

于 2013-07-11T18:17:03.120 回答
0

首先在全局范围内定义一个变量,该变量将保存您的“bigArray”,然后在您通过 ajax 调用接收到数据后为其分配值。

var bigArray;

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

...那么您的其他功能应该可以访问它。

于 2013-07-11T17:53:27.723 回答