2011-06-09 57 views
3

我有一个评分表,允许个人评分,然后放入评分组,但我很难弄清楚如何用jQuery或JavaScript完成此操作。总计分数并添加到分级结果中

例如,我的表单的第一部分具有此结构,其中应将每个组的总计写入​​字段。

<input id="Food1" name="Food" type="radio" value="5" /> 
<input id="Food2" name="Food" type="radio" value="10" /> 
<input id="Food3" name="Food" type="radio" value="15" /> 

<input id="Drink1" name="Drink" type="radio" value="5" /> 
<input id="Drink2" name="Drink" type="radio" value="10" /> 
<input id="Drink3" name="Drink" type="radio" value="15" /> 

<input name="CombinedScore" type="text" /> 

第二部分应检查组合分数的值并将其放置在适当的组中。例如

<input id="FoodDrinkGroup1" name="FoodDrinkGroup" type="radio" value="1-10" /> 
<input id="FoodDrinkGroup2" name="FoodDrinkGroup" type="radio" value="11-20" /> 
<input id="FoodDrinkGroup3" name="FoodDrinkGroup" type="radio" value="21-30" /> 

因此,如果有人得分10对食物和15饮料,它们应该被添加到21-30FoodDrinkGroup

在所有我有这样的三个组,但我希望如果我能为它工作,我应该能够应用相同的代码到其余的。

回答

1

使用类物品的不同群体将使得选择更简洁,但即使有这样的标记,你可以做这样的

$(function() { 
    // Part 1 
    var sum = parseInt($('input[name="Food"]:checked').attr('value')); 
    sum += parseInt($('input[name="Drink"]:checked').attr('value')); 
    $('input[name="CombinedScore"]').val(sum); 

    //Part 2 
    $('input[name="FoodDrinkGroup"]').each(function(i, elem) { 
     var range = $(elem).attr('value').split('-'); 
     if (sum >= range[0] && sum <= range[1]) { 
      $(elem).attr('checked', true); 
     } 
    }); 
}); 

JSFiddle

+1

我相信你应该总结前parseInt函数(值)。否则,他们是字符串。 – tiagoboldt 2011-06-09 11:15:38

+0

你是对的。相应更新 – mkilmanas 2011-06-09 11:19:20

+0

谢谢 - 这完美的作品和小提琴+1! – Willb 2011-06-09 11:36:59

0

请看下面的功能,似乎是工作。看到这里的工作活生生的例子 - http://jsfiddle.net/YUwUG/

function proc() { 

    food = $('input[name=Food]:checked').val(); 
    drink = $('input[name=Drink]:checked').val(); 

    combined = parseInt(food) + parseInt(drink); 

    $("#combined").val(combined); 

    if (combined < 11) { 
     $('#FoodDrinkGroup1').attr('checked', 'checked'); 
    } else if (combined < 21) { 
     $('#FoodDrinkGroup2').attr('checked', 'checked'); 
    } else if (combined < 31) { 
     $('#FoodDrinkGroup3').attr('checked', 'checked'); 
    } 

} 
+0

感谢您的建议,但不幸的是我无法得到这个工作... – Willb 2011-06-09 11:38:30

+0

a)你的小提琴缺乏“javascript “部分; b)在主html代码中没有定义“#combined”; c)在最后一个'if'之前你缺少'else',因此最后一个组总是被选中 – mkilmanas 2011-06-09 11:39:13

+0

啊,不知道,代码GO在哪里消失了。无论如何,谢谢你指出其他。 – 2011-06-09 11:43:53

0

有点晚了,但想到我会展示我公司生产的代码。这只是使用一点数学来确定什么组,以及它应该选择什么元素索引。

var total = 0; 

$('input[name=Food]:checked, input[name=Drink]:checked') 
.each(function() { 
    total += parseInt(this.value); 
}); 

var index = parseInt(total/11); 

$('[name=CombinedScore]').val(total); 

$('input[name=FoodDrinkGroup]').eq(index).prop('checked', true); 

工作现场小提琴:http://jsfiddle.net/garreh/5j7Jd/

+0

感谢这个例子。我尝试了这一点,是的,它在这个例子中有效,但是如果范围从5,10,15增加到1到12,它不能准确地评分。这不是原始问题的一部分,所以在这种情况下,你的解决方案效果很好 – Willb 2011-06-10 11:29:28

+0

如果它们增加5,则改变'var index = parseInt(total/6);' - 显然这种技术依赖于它们是你的范围的数学模式,所以mkilmanas技术虽然更长,但是更通用。 – 2011-06-10 11:53:14