grails:总和选定的值

时间:2013-05-17 09:45:22

标签: grails select sum selected

我在Grails中选择如下

<g:select name="receiptItems" from="${myGrailsProject.ReceiptItem.list()}" multiple="multiple" optionKey="id" optionValue="description" size="5" value="${receiptInstance?.receiptItems*.id}" class="many-to-many"/>

ReceiptItem对象有一个数字字段(金额)。我需要对所选值的金额字段求和,并将其放在另一个文本字段中。 特别是,当我选择一个新值时,我需要将它添加到“totalAmount”,反之,当我取消选择一个值时,我需要从“totalAmount”中删除该值。 我如何理解项目是被选中还是未被选中?如何在Controller类中执行计算,然后在javascript中使用新值更新文本字段? 谢谢你的帮助

2 个答案:

答案 0 :(得分:2)

你可以使用jquery来做到这一点。例如,您的选择是

<select id="mySelect" multiple="multiple">
  <option value="1">First</option>
  <option value="2">Second</option>
  <option value="3">Third</option>
  <option value="4">Fourth</option>
</select>

听取改变事件:

$('#mySelect').change(function() {
     var amount = 0;

     $('#mySelect option').each(function() {
            if($(this).is(':selected'))
                  amount += $(this).val(); 
      });

     $('#amount').val(amount);

 });

希望这有帮助。

答案 1 :(得分:0)

好的,你有一个对象的ID列表,你需要对该域的字段求和并将总和返回给javascript?如果是这样的话:

JavaScript的:

$('#mySelect').change(function() {
    var $this = $(this);
    $.ajax({
      type: 'POST',
      url: enterYourPathHere,
      data: {values: $this.val()},
      dataType: 'json',
      success: function(data) {
       //Populate your totalAmount field with data.amount
      },
      error: function(jqXHR, textStatus, errorThrown) {
       //Handle any errors
      }
});

控制器:

Float totalAmount = Object.findByIdInList(params.list("values"))?.amount?.sum() ?: 0

render [amount: totalAmount] as JSON

显然,为您的域名,字段等更改此内容...