2016-04-11 14 views
0

2つの入力、デビットとクレジットがあり、ボタンをクリックすると 'debits'という配列が更新されます。デビットは正の値を追加し、クレジットは負の値を追加します。

次に、配列の値を変数 'totalDebits'に合計し、その変数を使用して 'totalOutput'のhtmlを更新します。

私の目標は、アイコン[ - ]をクリックすることです。デビットを削除すると、その値が配列から減算され、合計出力が更新されます。クレジットが削除されると、その負の値が配列から削除されます。

スプライス。()と.inArray()メソッドを使用してみましたが、何らかの理由で私がデビットを削除すると、配列全体が空になります。

ここに私が試したスニペットとjsFiddleがありますので、問題を見ることができます。

//CLOSE BUT NO CIGAR, - 
    $(document).ready(function() 
    { 
      $(document).on('click','.fa-minus-square', 
      function() 
      { 

       var thisVal = Number($(this).parent().attr('value')); 

       if ($(this).parent().hasClass('debitItem')){ 

        debits.splice($.inArray(thisVal, debits) ,1); 

        $(this).parent().remove(); 

        console.log(debits); 

       } else if ($(this).parent().hasClass('creditItem')) { 

        debits.splice($.inArray(-thisVal, debits) ,1); 

        $(this).parent().remove(); 

       }; 

      } 

); 
     }); 

https://jsfiddle.net/agraymd/pbtof136/4/

コンソールを見たときに私がやりたいようだが、それがクリックされた借方の値を削除した後、配列が空になるまでそれだけで削除し続けます。

私はtotalOutputを自分で更新するところまで到達することができますが、配列を正しく更新していなかったので、コードのその部分を削除しました。

私は私の説明と正しい用語を使用して明確になることを希望します。私はまだ初心者くさい:)



は、ここで私はそれを削除するのではなく、借方の配列にデビットカードまたはクレジットの逆の値を追加し、新たなフィドルですよ。それを取り除くのが良いと思う。 https://jsfiddle.net/agraymd/pbtof136/


+0

スプライスと組み合わせてinArrayを使用するように注意してください。 inArrayは配列に一致するものがなければ-1を返し、負の数をspliceに渡すと、配列の最後から開始する点を除いて配列内のエントリは削除されます。代わりに、クリックしたクレジット/デビットが配列内のアイテムと一致しない場合(つまり、inArrayが-1を返す)、エラーチェックを追加して関数から戻ることができます。 – code4pi

答えて

1

あなたは全体マッチしたセットに設定する前に、既存のonclickイベントハンドラをバインド解除する必要があります。これは、ボタンがn回(n =この後に追加された項目の数)クリックされたかのようですが、実際にはn回クリックされたため、n回呼び出されます。

変更この:

$(document).on('click','.fa-minus-square', 
     function() 
     { 
     ... 
     }); 

へ:私はthis fiddleに適切な変更を行った

$('.fa-minus-square').unbind().click(function() 
      { 
       ... 
      }); 

+0

甘い!ありがとう。面白いことに、元の投稿の一番下にある2番目のフィドルに値またはその逆数を単に追加するようにコードを変更した後に、私がしなければならないことがわかったのです。削除のためにそれを試すとは思わなかった。私はそれが二度リンクしているかどうか分からないので、もっと機能を勉強する必要があります。アンバインドバインドを行うのは悪い習慣ですか?どこかに深刻な問題があることを示す別の場所を読んでいます。それは変数を使用するための最初のクリック機能を使用しているためです。代わりに、より広い範囲と別々の関数を定義する必要がありますか? –

+0

エントリが追加されるたびに、すべての '.fa-minus-square'(再び)にハンドラを割り当てたので、これが起こっていました。アンバインドは、デフォルトのアクションも取り除くので、良いことです。そのため、要素をこの1つのものにリセットするだけです。 –

関連する問題