-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]'、 (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、毎回すべてを再レンダリングする必要がないように、リファクタリングをお勧めします。

于 2013-07-11T18:17:03.120 に答える
0

最初に「bigArray」を保持するグローバルスコープで変数を定義し、ajax 呼び出しでデータを受け取ったら値を割り当てます。

var bigArray;

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

...その後、他の機能がそれにアクセスできる必要があります。

于 2013-07-11T17:53:27.723 に答える