我正在使用完整日历在我的 struts2 应用程序中构建一个日历。 但。。。我遇到了一点问题。 我们构建了一个高级搜索,允许我们过滤日历事件服务器端并返回结果列表。 我能够让大多数东西正常工作,除了具有多个选择的选择,我认为这是因为我错误地使用了我的 jquery。
我的ajaxLocationCalendar.action
希望看到位置列表,而不是包含多个位置的字符串。
在我的代码中,我有一个<select id="locationsSelect" multiple="multiple">
它有几个选项。
我的完整日历设置如下所示:
events: {
url: 'ajaxLocationCalendar.action',
data: {
'scheduleableCriteria.approvalStatus': function() {
return $('#approvalStatusSelect').val();
},
'scheduleableCriteria.locations': function() {
return $('#locationsSelect').val();
}
}
}
该#approvalStatusSelect
运行良好,因为有 4 个有效选项,并且是单选。 但是我在#locationSelect
有问题。
如果我不选择任何内容,我最终会发送与任何东西不匹配的"null"
。 如果我只选择一个选项,我会得到一个有效的结果,因为它被正确包装了。 如果我尝试发送两个选定的内容,我最终会发送类似 "Apartment,Building+3"
.
除了.val()
之外,是否有其他功能可以让我发送列表而不是我现在得到的?
任何帮助表示赞赏,如果您需要澄清,请将其放在评论中,我会尝试澄清更多。
'scheduleableCriteria.locations': function() {
return $('#locationsSelect').val();
}
这只会返回一个字符串 - 将多个值显示为逗号分隔的列表。因此,在操作中,它们实际上最终是一个单字符串。
将所有要提交的字段放在表单标记中,然后使用序列化,如下所示
var submit_data = $('form').serialize();
然后,您的代码将更改为显示为:
events: {
url: 'ajaxLocationCalendar.action',
data: submit_data
}
这样,多选将作为数组而不是字符串提交。
解决方案 2 :
创建自定义函数,解析选择并返回所有选定值的数组
完整的解决方案在这里
以下最终使用以下方法,因为 .serialize() 和 .seralizeArray() 无法正常工作。
data: function() {
var data = {};
data['scheduleableCriteria.approvalStatus'] = $("#approvalStatusSelect").val();
var locations = $("#locationsSelect").val();
if (locations) {
$.each(locations, function(i, location) {
data['scheduleableCriteria.locations[' + i + ']'] = location;
});
}
return data;
}