静的要素を持つ 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]'、 (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);
});
...その後、他の機能がそれにアクセスできる必要があります。