- ベストアンサー
SharedObjectの消去方法のスクリプト作成
- Windows-XPでFlash8を使用している場合、タイムラインの1フレームから3フレームまでのデータを保存し、4フレーム目の4頁に表示します。
- データは各頁のテキスト入力フィールドに保存され、SharedObjectを使用してcookieに保存します。
- 質問者は、各頁に「A:当該頁のデータ消去」と「B:全頁のデータ消去」というボタンを作成し、クリックした時に欲しい動作を実現したいと考えています。しかし、スクリプトを作成してもデータが上手く消去されないという問題が発生しています。正しいスクリプトの作成方法を教えてほしいとのことです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
if(myLSO.data.p01a != null) のようにして null で値の有無を判定していることもでもありますし 個別の値を削除する場合は普通に null を代入すれば良いだけなのではないでしょうか? また ボタン「A」による一斉削除に関しては myLSO.clear (); でできますよ。 実際に作ってみましたがそれで別に不具合は起きませんでした。 (フレーム4 の myLSO.data.p04a~myLSO.data.p04c の3つはどうしているのかは知りませんけど。) ===例============ ---フレーム1------------- stop (); // myLSO = SharedObject.getLocal ("Flashcookie", "/"); // if (myLSO.data.p01a != null) { p01a.text = myLSO.data.p01a; } p01a.onChanged = function () { myLSO.data.p01a = p01a.text; }; // if (myLSO.data.p01b != null) { p01b.text = myLSO.data.p01b; } p01b.onChanged = function () { myLSO.data.p01b = p01b.text; }; // if (myLSO.data.p01c != null) { p01c.text = myLSO.data.p01c; } p01c.onChanged = function () { myLSO.data.p01c = p01c.text; }; //--- A.onRelease = function () { myLSO.clear (); }; // B.onRelease = function () { myLSO.data.p01a = null; myLSO.data.p01b = null; myLSO.data.p01c = null; }; //--- next_btn.onRelease = function () { nextFrame (); }; back_btn.onRelease = function () { prevFrame (); }; ----------------------- ---フレーム2------------- if (myLSO.data.p02a != null) { p02a.text = myLSO.data.p02a; } p02a.onChanged = function () { myLSO.data.p02a = p02a.text; }; // if (myLSO.data.p02b != null) { p02b.text = myLSO.data.p02b; } p02b.onChanged = function () { myLSO.data.p02b = p02b.text; }; // if (myLSO.data.p02c != null) { p02c.text = myLSO.data.p02c; } p02c.onChanged = function () { myLSO.data.p02c = p02c.text; }; //--- B.onRelease = function () { myLSO.data.p02a = null; myLSO.data.p02b = null; myLSO.data.p02c = null; }; ----------------------- ---フレーム3------------- if (myLSO.data.p03a != null) { p03a.text = myLSO.data.p03a; } p03a.onChanged = function () { myLSO.data.p03a = p03a.text; }; // if (myLSO.data.p03b != null) { p03b.text = myLSO.data.p03b; } p03b.onChanged = function () { myLSO.data.p03b = p03b.text; }; // if (myLSO.data.p03c != null) { p03c.text = myLSO.data.p03c; } p03c.onChanged = function () { myLSO.data.p03c = p03c.text; }; //--- B.onRelease = function () { myLSO.data.p03a = null; myLSO.data.p03b = null; myLSO.data.p03c = null; }; ----------------------- ---フレーム4------------- myLSO.data.p04a = 0; myLSO.data.p04b = 0; myLSO.data.p04c = 0; // for (i = 1; i <= 3; i++) { if (myLSO.data["p0" + i + "a"] != null) { myLSO.data.p04a += Number (myLSO.data["p0" + i + "a"]); } if (myLSO.data["p0" + i + "b"] != null) { myLSO.data.p04b += Number (myLSO.data["p0" + i + "b"]); } if (myLSO.data["p0" + i + "c"] != null) { myLSO.data.p04c += Number (myLSO.data["p0" + i + "c"]); } } // p04a.text = myLSO.data.p04a; p04b.text = myLSO.data.p04b; p04c.text = myLSO.data.p04c; //--- B.onRelease = function () { myLSO.data.p04a = null; myLSO.data.p04b = null; myLSO.data.p04c = null; }; ----------------------- ================ ※注意 話がややこしくならないように, ボタン「A」 や ボタン「B」 のクリック時には SharedObjectに保存されるデータしか null にしていません。 したがって, それらボタンをクリックした瞬間には, テキストフィールド内の文字まで一緒に "" にはなりません。 もしそこまでするのでしたら,それは別に p01a.text = ""; p01b.text = ""; p01c.text = ""; のように指示する必要があります。 それとちなみに, delete ステートメントは 指定したオブジェクトへの参照(関連付け)を破棄する(切る)スクリプトです。 delete で参照を破棄するするのではなくて, データ自体を "" や null のように操作する必要があると思います。 //---delete検証例------------ //オブジェクト「obj」を作成 var obj:Object = new Object(); obj.data = "あいう"; // //変数「A」と「B」にそれぞれ「obj」への参照を代入 var A:Object = obj; var B:Object = obj; // trace(obj.data); //→出力:あいう trace(A.data); //→出力:あいう trace(B.data); //→出力:あいう trace("------"); // delete A; trace(obj.data); //→出力:あいう trace(A.data); //→出力:undefined trace(B.data); //→出力:あいう trace("------"); /* ↑delete A では 変数「A」の参照が破棄されるだけで 「obj」自体やその中のデータが削除されるわけではない。 */ // B.data = null; trace(obj.data); //→出力:null trace(A.data); //→出力:undefined trace(B.data); //→出力:null /* ↑B.data = null で 変数「B」の参照オブジェクトの data も null になる。 つまり,本家本元の「obj」内の data も null になる。 */ //------------------------- 作ってみたもののスクリーンショット↓
お礼
myLSO.clear (); と p01a.text = ""; の組合せで当初の予定しておりましたスクリプトを完成することができました。大変詳細なご説明と共にご回答頂きまして大変有難うございました。また、ご連絡が遅くなりまして申し訳ありませんでした。