0

我在 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 中使用新值更新文本字段?谢谢你的帮助

4

2 回答 2

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);

 });

希望这可以帮助。

于 2013-05-17T10:34:54.527 回答
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

显然为您的域、字段等更改此设置...

于 2013-05-22T16:51:33.733 回答