0

localstaorageを使用して小さなアプリを作成しています(まだ実装されていません)。テキスト領域にメモを入力すると、リストに表示されます。

ノートは、ノートと呼ばれるオブジェクトにスタックされます(将来のローカルストレージ用)。

しかし、私の問題は次のとおりです。メモを追加できますが、それらを削除しようとすると、'notes'配列内のliと関連するnoteオブジェクトを削除する必要があるため、spliceメソッドを使用することにしましたが、機能します。奇妙な方法で...

「閉じる」をクリックすると、1〜2回正常に動作しますが、現時点では、配列には1つまたは2つのオブジェクトが含まれています。

私は問題を解決するためにさまざまな方法を試しましたが、成功しませんでした...

これがフィドルです:http://jsfiddle.net/h8hg6/1/

ご協力いただきありがとうございます

4

2 に答える 2

0

問題は、への呼び出しが変数spliceの値を使用して、配列queueから削除される要素のインデックスを決定することです。notesここで:

notes.splice(queue, 1);

queue値は常に増加しているので(ここで):

 function addNoteToPage(){
    i++;
    ...
    jQuery('ul#notes li:first').before('<li  data-queue="'+ i +'">'+ note.text +' <a href=""#>CLOSE</a>

配列の存在しないインデックスでスプライスを呼び出した瞬間にヒットしnotes、結果として何も削除されません。notes基本的に、非同期の配列になってしまいます。

の呼び出しが常に成功し、適切な配列要素が削除されるように、data-queue属性の値が配列内の要素の実際のインデックスと一致することを確認する必要があります。notessplice(queue,1)

そうは言っても、上記の答えがあなたのために働くなら、私はそれで行きます。何が起こっているのかについてもっと洞察を与えたかっただけです...

于 2012-07-17T17:42:28.087 に答える
0

問題を解決できると思うように、フィドルにいくつかの変更を加えました。基本的に、.splice誤って使用していて、配列がノート要素と同期していませんでした。処理がはるかに簡単なため、配列を数値ベースのオブジェクトに置き換えました。関連する変更の一部を次に示します。

http://jsfiddle.net/h8hg6/2/

var notes = {}; // notes is now an object instead of an array
// snip

var number = jQuery(this).parents('li').data('number');
delete notes[number]; // this is how you remove properties from an object

// snip
var note = {
    color: color,
    text: text
};

notes[i] = note; // add this object as a property of the notes object
i++;
于 2012-07-17T17:31:01.563 に答える