创建一个带有静态元素的 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);
});
...那么您的其他功能应该可以访问它。