2017-11-07 4 views
0

私はこの質問が既にここで答えをたくさん得ていることを知っていますが、これらの解決策は私のために働いていない、多分私は何かばかげているんだけど、私のコードで正確に何が間違っているのかよく分かりません。また、一時的なデータをオブジェクト配列に保存し、後でajaxとphpを使用してデータベースに送信するのもよいでしょうか?jQueryでオブジェクト配列を正しくクリアするには?

私は多段階のフォームを作成しています。私はステップ間でデータを保存する必要があります。

コードから、私はオブジェクトをクリアするためのさまざまな解決方法を試してみましたが、どれもうまくいきませんでした。また、私は長さをチェックするとき、それは常にオブジェクトが空であることを意味する0です。私はここで何が欠けていますか?

コンソールログをチェックするたびに、以前のデータが残っています(画像を確認してください)。あなたはスコープの問題を持っている私のコード

$(document).on('click', '.e-check', function(){ 
    $('.e-check').text('check_box_outline_blank'); 
    $('.e-check').removeClass('e-checked'); 
    $(this).text('check_box'); 
    $(this).addClass('e-checked'); 
    var edata = ''; 
    edata = {}; 
    edata = undefined; 
    console.log(edata.length); 
    edata = { 
    'ename' : $(this).data('ename'), 
    'owner' : $(this).data('owner'), 
    'estart' : $(this).data('estart'), 
    'eid' : $(this).data('eid'), 
    'eat' : $(this).data('eat'), 
    'sec' : $(this).data('sec'), 
    'pid' : $(this).data('pid') 
    }; 
    $(document).on('click','.e-next-1', function(){ 
     console.log(edata); 
    }); 
}); 
+1

別のデリゲートバインディング内にデリゲートバインディングを作成しています。それをしないでください。それを自分自身にするためにそれを引き出すので、何度も繰り返し作成されることはありません。以前のバインディングは、e-next-1がクリックされるたびに古い 'edata'変数で繰り返されます。なぜあなたは古いデータを表示していますか? – Taplar

+0

明らかにjavascriptのスコープは理解できません。同じ名前で異なる値を持つ2つの変数を比較しています。続きを読む:http://ryanmorr.com/understanding-scope-and-context-in-javascript/ –

+0

@SamKuhmonen申し訳ありません、私はちょうど、私がオンラインで見つけたさまざまなソリューションでオブジェクトをクリアしようとしていました:D – drpzxc

答えて

2

。変数をグローバルに宣言して、変数を変更する必要があります。

var edata = ''; 

$(document).on('click', '.e-check', function(){ 
    $('.e-check').text('check_box_outline_blank'); 
    $('.e-check').removeClass('e-checked'); 
    $(this).text('check_box'); 
    $(this).addClass('e-checked'); 
    edata = {}; 
    edata = undefined; 
    console.log(edata.length); 
    edata = { 
    'ename' : $(this).data('ename'), 
    'owner' : $(this).data('owner'), 
    'estart' : $(this).data('estart'), 
    'eid' : $(this).data('eid'), 
    'eat' : $(this).data('eat'), 
    'sec' : $(this).data('sec'), 
    'pid' : $(this).data('pid') 
    }; 
}); 

$(document).on('click','.e-next-1', function(){ 
    console.log(edata); 
}); 

var edate = ''に注意してください。一部がクリックコールバックの外側にあるため、グローバルにアクセス可能です。

+0

ああwauw、私は内部のバインディングについての部分を逃した。私は答えを更新します –

+0

@タプラは正しいです。私は関数から他の束縛を取り、問題を解決しました。 – drpzxc

関連する問題