【问题标题】:jQuery select values as listjQuery选择值作为列表
【发布时间】:2013-10-24 14:02:49
【问题描述】:

我正在使用fullcalendar 在我的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() 之外,还有其他功能可以让我发送列表而不是我现在收到的吗?

任何帮助表示赞赏,如果您需要澄清,请将其放在 cmets 中,我会尝试澄清更多。

【问题讨论】:

  • 你可能想take a look at map()
  • @AndreaLigios 不幸的是,我不太确定如何解决我的问题 :-( 是的,我可以这样构建一个键值对,但是......它不太正确。$.map() 我最终得到如下内容:0[name]: "scheduableCriteria.locations"0[value]: "Apartment"1[name]: "scheduableCriteria.locations"1[value]: "Gym" 但我需要的是scheduableCriteria.locations : ApartmentscheduableCriteria.locations : Gym
  • Struts 将多个相同名称转换为List,并将每个实例作为一个条目。使用地图,我将不得不遍历我的 Java action 中的项目,并在幕后做一些时髦的事情。
  • 只需将您的scheduleableCriteria.locations 声明为列表即可。
  • @AleksandrM 在我的操作中我有一个ScheduleableCritera,在其中我有private List<String> locations; 所以......它已经是一个List。但是,正如我在问题中所说的,选择多个选项会产生类似于以下内容的字符串:"scheduableCriteria.locations":"Apartment, Gym" 而不是两个条目的 scheduableCriteria.locations : Apartment scheduableCriteria.locations : Gym

标签: jquery struts2 fullcalendar


【解决方案1】:
'scheduleableCriteria.locations': function() {
      return $('#locationsSelect').val();
    }

这只会返回一个字符串 - 以逗号分隔的列表显示多个值。所以在行动中,它们实际上最终是一个单一的字符串。

将所有要提交的字段放在一个表单标签中,然后使用如下序列化

var submit_data = $('form').serialize();

然后您的代码将更改为:

events: {
  url: 'ajaxLocationCalendar.action',
  data: submit_data        
}

这样多选将作为数组而不是字符串提交。

解决方案 2:

创建一个自定义函数,解析选择并返回一个包含所有选定值的数组

Complete Solution Here

【讨论】:

  • 遗憾的是,由于发送数据的方式,这不起作用。我不记得出了什么问题的细节,但似乎使用 .serialize() 最终做了一个 k,v,每个键值只有一个字符。感谢您的帮助尝试。
【解决方案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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 2013-08-12
    • 2013-11-09
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多