2017-03-06 7 views
0

このjQueryコードでは、class = validinput要素のvalueをすべてチェックします。どうしたの? THXすべてのチェックボックスの合計値属性

Template.checkbox.events({ 
    'click .valid':() => { 
    $("input.valid:checked").each(function() { 
     console.log(this); //total them here 
    }) 
    } 
}); 
<template name="checkbox"> 
    <div class="checkbox-container"> 
    <div class="checkbox"> 
     <label class="check"> 
     <input class="valid" type="checkbox" name={{name}} value={{value}} checked={{checked}}>{{label}} 
     <input class="count" type="checkbox" name={{name}} value={{value}} checked={{checked}}> 
     </label> 
    </div> 
    </div> 
</template> 
+0

をさて、あなたは、単に、(.each内部で、その後、合計として機能するようにクリックハンドラ内の変数が必要です) $(this).val()をsum変数に追加します。推測で。私は流星を知らないので、私は確かに言うことができませんでしたが、それは私が行く方法です。 – Snowmonkey

+0

['reduce'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce)は、ループの合計に適しています。 –

+0

あなたは見るべきjsfiddleがありますか? –

答えて

0
var total = null; 
Template.checkbox.events({ 
    'click .valid':() => { 
    $("input.valid:checked").each(function() { 
     total += parseFloat(this.value); 
    }) 
    } 
}); 
console.log(total); 
+0

MeteorでTemplateイベントハンドラの外に変数を作成することはお勧めできません。イベントヘルパーの範囲外に必要な場合は、 'Session'に格納する必要があります。 –

+0

@SterlingArcher私は流星について何も知らないので、それについての私の誤りを説明しますが、答えを保持するために変数を設定し、その変数に値を追加する必要があるという全体的な考え方は無関係です。 –

1

あなたのセレクタは良いですが、今、あなただけの値に各ループをインクリメントする必要があります。あなたはそれがreduce、その後、アレイへのすべての値を取得するために.mapを使用することができます。

var total = $("input.valid:checked").map(function() { 
    return this.value; 
}).get().reduce(function(t, number) { 
    return t += parseInt(number, 10); 
}, 0); 
+0

これはいいですが、LambdasでES6にすることもできます! –

+0

@SterlingArcher - 私は 'reduce'呼び出しをラムダすることができますが、jQuery' each'は 'this'の値を混乱させるはずはないでしょう。 – tymeJV

+0

これを処理するためのもっと大きな方法があると確信していますが、私が同意するように流星を軽蔑してください。 –

関連する問題