我正在遍历一个对象,对于循环中的每个实例,我想提供一个多选下拉列表(使用jQuery插件SumoSelect)。但是,现在,SumoSelect似乎仅绑定到循环中的第一个多选下拉列表,之后没有任何下拉列表。循环中的每个下拉菜单如何具有SumoSelect效果? (在Github上有一个未解决的问题)

在控制台上,我看到第一个下拉列表已附加:div class="SumoSelect" tabindex="0">,但这不适用于其他示例。

我尝试了几种不同的选择,并查看了源代码(并在Google上搜索了一堆),但不清楚我需要做些什么。

这是一个简化的示例。假设我有一个可以包含许多“作者”的类“ post”。在显示“帖子”的页面上,我想遍历帖子,对于每个帖子,给用户一个多选下拉列表,从中可以选择作者添加到帖子中。现在,循环中第一篇文章的作者下拉列表具有正确的SumoSelect效果,但是此后的任何帖子上都没有SumoSelect效果:

posts / view.html.erb(此下拉列表可为帖子和作者创建一个联接表条目-做到这一点的控制器代码可以正常工作,问题只是在第一个下拉循环后绑定了SumoSelect):

<% @posts.each do |post| %>
....
<select id="author-choice" name="author_ids[]"  multiple="true">
  <% Author.all.each do |author| %>
     <option value="<%= author.id%>",<%= author.name %></option>
  <% end %>
</select> ...


在我的JavaScript中,我有:

$(document).ready(function (){
  $('#author-choice').SumoSelect();
});

最佳答案

您的问题是每个下拉菜单都具有相同的ID,并且ID的目的是唯一的。更改您的select元素,以便author-choice是一个类(class='author-choice'),并将jQuery选择器更改为$('.author-choice')。如果那仍然不能解决问题,那就是SumoSelect的错,您必须使用迭代器将应用SumoSelect的行换行:

$('.author-choice').each(function() {
    $(this).SumoSelect();
});

07-24 09:30