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