填写所有字段时计算平均值

时间:2010-10-18 13:39:45

标签: jquery forms

我想计算一些数字的平均值(平均值)。每个值都来自一个无线电按钮,它是声明的一部分。 例如:

<div class="question_answer"> 
<div id="statementRow_9" class="clearfix t_a_ui_data_list_content"> 
    <div class="question"> 
        <p>3een tweede edit iets 1 iets 1 iets 1 iets 1 iets 1 iets 1 iets 1 iets 1 iets 1 iets 1 iets 1 iets 1 iets 1 iets 1 iets 1 iets 1 </p> 
    </div> 
    <div class="answer"> 
        <ul>
            <li><input type="radio" name="statement_9" id="9_0" checked >0</li>
            <li><input type="radio" name="statement_9" id="9_1">1</li>
            <li><input type="radio" name="statement_9" id="9_2">2</li>
            <li><input type="radio" name="statement_9" id="9_3">3</li></ul>
    </div> 
</div> 
<div><hr /></div>  </div> <div class="question_answer"> 
<div id="statementRow_10" class="clearfix t_a_ui_data_list_content"> 
    <div class="question"> 
        <p>3een tweede edit iets 1 iets 1 iets 1 iets 1 iets 1 iets 1 iets 1 iets 1 iets 1 iets 1 iets 1 iets 1 iets 1 iets 1 iets 1 iets 1 </p> 
    </div> 
    <div class="answer"> 
        <ul>
            <li><input type="radio" name="statement_10" id="10_0" checked >0</li>
            <li><input type="radio" name="statement_10" id="10_1">1</li>
            <li><input type="radio" name="statement_10" id="10_2">2</li>
            <li><input type="radio" name="statement_10" id="10_3">3</li></ul>
    </div> 
</div> 
<div><hr /></div> 

radiobuttons的名称是statement_9,其中9是语句的id,id是9_0-9_3,其中9是语句的id,0-3是radiobuttons的值。

这些陈述按类别分组,并且必须按类别计算均值,因此通常不会计算。

有什么建议吗?谢谢!

1 个答案:

答案 0 :(得分:1)

有点冗长的做法就是这样:

function calculateMeans() {
    var $inputs = $('div.answer input'),
        map = {},
        ret = {};

    $inputs.each(function(){
        if (!map[this.name]) {
            map[this.name] = [];
        }

        map[this.name].push(this.id.substring(this.id.length-1));
    });

    $.each(map, function(key, val) {
        for (var i = 0, j = val.length, sum = 0; i < j; i++) {
            sum += parseInt(val[i]);
        }
        ret[key] = sum / j;
    });

    return ret;
}

这给出了以下形式的对象(在这种情况下):

{
  statement_9: 1.5,
  statement_10: 1.5
}

这可能有更好的方法......


编辑要获取所有选定输入元素的均值,请使用以下命令:

var mean = (function(){
    var sum = 0,
        $inputs = $('div.answer input:checked');

    $inputs.each(function(){
        sum += parseFloat(this.id.substring(this.id.length-1));
    });

    return sum / $inputs.length;
})();