我在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中使用新值更新文本字段? 谢谢你的帮助
答案 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
显然,为您的域名,字段等更改此内容...