【问题标题】:Select2 doesn't show selected valueSelect2 不显示所选值
【发布时间】:2013-02-04 03:07:25
【问题描述】:

Select2 成功加载列表中的所有项目,这是我在页面加载时尝试选择特定值时发现的问题。示例:

:: 将 select2 放在特定的 html 元素中,即使加载了所有项,也不会选择任何值。

$('#my_id').select2();

:: 加载页面时,我试图显示选定的特定项目,但没有按预期工作,因为即使选择了,select2 也不会显示它。

$('#my_id').val('3'); //select the right option, but doesn't render it on page loads.

如何让选中的选项在页面加载时弹出?

提前致谢。

更新

:: 我如何加载所有 select2 项目(对不起,它的玉,不是纯 HTML):

label(for='category') Category
    span.required *
select(id='category', style='width:230px', name='category')
    option(value='') - Select -
    each cat in categories
        option(value='#{cat.id}') #{cat.description}

P.S.:我列表中的所有项目都已加载。

:: 我如何初始化 select2:

只需将以下行代码放在我的 javascript 上,它就成功了:

$('#category').select2();

:: 我如何尝试选择特定值:

  • 第一次尝试:

    $('#category').select2(
        {
            initSelection: function(element, callback) {
                callback($('#field-category').val());
            }
        }
    );
    
  • 第二次尝试:

    $('#category').val($('#field-category').val());
    

P.S.:#field-category 有一个隐藏输入字段的值,可以正常工作。

谢谢各位!

【问题讨论】:

  • “3”是您要选择的选项的值吗?您是否将代码包装在文档就绪函数中?
  • 你能分享一下 select2 的标记/数据吗
  • @Ito 查看我的更新答案,看起来不需要使用initSelection

标签: jquery-select2


【解决方案1】:

您需要使用initSelection 选项来设置初始值。

如果你使用预定义的select元素来创建select2,你可以使用下面的方法

$('select').select2().select2('val','3')

演示:Fiddle

【讨论】:

  • 我之前尝试过initSelection,可能我的代码有误。我会在这里展示
  • 谢谢阿伦,为我工作。当页面加载时,select2 会加载一个特定的值。
  • 不错的代码,顺便说一句,我想了解为什么我必须使用 select2() 两次?
  • 这是因为,我没有找到将初始值传递给select2 的方法。所以我使用第一个调用创建select2,然后使用第二个调用设置值。
  • 现在不推荐使用 Select2 4.0.0 中的 of the other answer,并且可能会在 Select2 4.1.0 中完全停止工作。
【解决方案2】:

在设置 val 后添加触发变化:

$('#my_id').val('3').trigger('change');

【讨论】:

  • 这是现在推荐的在 4.0.0 中设置值的方法,因为它始终如一地工作并且与普通的 <select> 匹配。
  • 如果我不想触发更改并且仍然显示它怎么办?
  • 但是如果我在“select2:select”上附加了一些东西并且没有改变呢?执行上述操作无效。
【解决方案3】:

解决这个问题的一个非常简单的方法是:

//Step1: Here assuming id of your selectbox is my_id, so this will add selected attribute to 1st option
$('#my_id option').eq(0).prop('selected',true);

//Step2: Now reinitialize your select box

//This will work, if you haven't initialized selectbox
$('#my_id').select2(); 

//This will work, if you have initialized selectbox earlier, so destroy it first and initialise it
$('#my_id').select2('destroy').select2();

【讨论】:

    【解决方案4】:

    这可能会有所帮助:

    $('#mySelect2').val('1'); // Select the option with a value of '1'
    $('#mySelect2').trigger('change'); // Notify any JS components that the value changed
    

    您可以在here找到更多详细信息:

    谢谢

    【讨论】:

      【解决方案5】:

      根据 here initSelection 在 Select2 4.0 及更高版本中已弃用。

      使用 Select2 4.0.0 这对我有用:

      $('#my_id').select2({val:3});
      

      HT:@Kokizzu

      【讨论】:

      • val 甚至不是 Select2 的有效选项,这是因为调用 .select2() 会完全重新初始化 Select2(最终会检测到新的选定值)。
      【解决方案6】:

      这里是如何让 val 在 select2 中只选择相应的元素。 由于某种原因,select2 没有提供按 id 查找选择的功能。

      初始化:

      $("#thing").select2({data:sources, initSelection: function(item, callback) {
        // despite select2 having already read the whole sources list when you 
        // do .val(n) you have to explicitly tell it how to find that item again.
        var to_be_selected = null;
        $.each(sources, function(index, thing) {
          if (thing.id == item.val()) {
            to_be_selected = thing;
            return;
          }
        })
        callback(to_be_selected);
      }})
      

      普通代码

      // to load the thing with id==3 from the initial sources list.
      $("#thing").select2({'val': 3})
      

      【讨论】:

      • 可能是{val:3} 而不是{'val', 3}
      • {val: 3}(不是真正的选项)和{val, 3}(无效语法)实际上不起作用。如果 Select2 重新初始化自己,您可能会很幸运,但从长远来看,这是一个幸运的副作用。
      【解决方案7】:

      对我来说,我在数据集中发送选择仍然没有选择默认选项。我必须执行以下操作才能使其正常工作-

      $(".select").select2({
          data: data_names
      });
      data_names.forEach(function(name) {
          if (name.selected) {
              $(".select").select2('val', name.id);
          }
      });
      

      【讨论】:

        【解决方案8】:

        我有一个带有多个选择的多个 select2 框。

        第 1 步是将我的 school_ids 字符串放入与每所学校的 id 对应的整数数组中,并删除前导零。我必须在单独的脚本标签中执行此操作。

        <script>
            var school_ids = <%= raw JSON.parse(@search.school_ids).map{|x| x.to_i} - [0]%>
        </script>
        

        第二步是创建选择框,然后设置值,然后像这样触发:

        <script>
        $(document).ready(function() {
                $('.select2-multiple').select2({
                    placeholder: "Hit Enter After Selection",
                    width: 'resolve'
                });
                $('.select2-multiple').val(school_ids);
                $('.select2-multiple').trigger('change');
        </script>
        

        【讨论】:

          【解决方案9】:

          触发 select2 设置值

          $('#my_id').val('3').trigger("change.select2");
          

          这将触发带有下拉菜单的 select2

          $('#my_id').val('3').trigger("change");
          

          【讨论】:

            【解决方案10】:

            我遇到了同样的问题,这对我有用:

            Using Select2 > 4.0.0
            $('#select_id').val('3').trigger('change');
            

            【讨论】:

              【解决方案11】:
                var option=$(this);
                 if(option.val()==data.StudentCourses.CourseId)
                 {
                  option.setAttribute('Selected');
                 }
                 });
              

              我已经初始化了 select2,因为我只想从中选择几个选项。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-10-10
                相关资源
                最近更新 更多