创建一个带有静态元素的 JavaScript 全局数组?
2 回答
问题不在于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,我建议重构,这样你就不必每次都重新渲染整个东西。
首先在全局范围内定义一个变量,该变量将保存您的“bigArray”,然后在您通过 ajax 调用接收到数据后为其分配值。
var bigArray;
$.ajax({
bigArray = bigArrayFromAjax;
renderArray(bigArray);
});
...那么您的其他功能应该可以访问它。