0

私のページにはチェックボックスがありません。ページをロードしている間、いくつかの値を収集し、sendStatus1 という配列にプッシュしています。また、その値を submitView という他の変数に割り当てています。

私が割り当てる理由、両方の配列が同じか異なるかを確認したいのですが、両方が異なる場合は投稿します。そうでない場合は投稿しません。

しかし、動的変数として、ユーザーがチェックボックスをクリックするたびに、両方の配列が更新され、違いがわかりません。

配列を見つける方法は、ロードされた状態とは異なります..?

私の試み:

submitView = sendStatus1; //onload i do.

    var submitStatus = function(){

            var submitButton = $("span.submit").find("button[type='button']");

            console.log(submitView, sendStatus1); //but both are same always..


        }

チェックボックスをクリックしても更新できないsendStatus1を保存するにはどうすればよいですか? この問題を思いつく方法..誰か助けてください?

4

2 に答える 2

1

配列を別の配列に割り当てると、配列が Javascript に格納されるため、次のようになります。

submitView = sendStatus1;

一方の参照を他方に割り当てると、両方の参照が同じ配列を指します。

clone次のようにできる配列が必要です。

submitView = sendStatus1.slice(0);

これにより、比較に使用できる配列のまったく新しいコピーが作成されます。

于 2013-07-12T07:42:52.767 に答える
0

...sendStatus1 という配列にプッシュし、submitView という別の変数に値を割り当てます。

何かを配列にプッシュすると、その配列が変更されます。新しい値を含む新しい配列は作成されません。たとえば、次のようになります。

var a = [];        // Create an array
var b = a;         // Now both `a` and `b` point to the **same** array
a.push("hi");      // Modify the one array they both point to
console.log(b[0]); // "hi"

上記の原則を自分のコードに十分に投稿していないため、上記の原則を適用することはできませんが、それが「2 つの配列」が同じである理由である可能性があります。2 つの配列ではなく、1 つの配列です。

最初の配列のコピーである 2 番目の配列を本当に作成してから追加したい場合は、それを行うことができますが、通常はより良い答えがあります。

var a = [];                // Create an array
a.push("First entry");     // Put something in it
var b = [].concat(a);      // Create a *new* array with copies of `a`'s entries
b.push("Second entry");    // Put something on the new array
console.log(a.join(", ")); // "First entry"
console.log(b.join(", ")); // "First entry, Second entry"

(技術的には、作成されて破棄される一時配列があるため、上記は少し非効率的です。次のように配列をコピーすることもできます。

var b = [];
b.push.apply(b, a);

...しかし、それはもっと複雑なので、上記を単純にしたかったのです。)

于 2013-07-12T07:42:26.437 に答える