如何动态调整 select2 输入的大小,使其与所选选项的宽度相同?

Posted

技术标签:

【中文标题】如何动态调整 select2 输入的大小,使其与所选选项的宽度相同?【英文标题】:How can I dynamically resize a select2 input to be the same width as the selected option? 【发布时间】:2016-10-22 23:03:51 【问题描述】:

我正在使用一系列内联选择输入构建“自然语言”搜索表单,并使用 jQuery Select2 进行样式设置。 Select2 输入的宽度似乎设置为初始化时所选选项的宽度,这很棒。我只是不知道如何在更改所选选项时更新宽度。有什么想法吗?

非常感谢!

【问题讨论】:

【参考方案1】:

尝试将其添加到您的 CSS 文件中:

.select2-container 
    width: 100% !important;

它解决了我使用 select2 调整大小的问题

(已编辑:我不使用占位符)

【讨论】:

它只设置容器宽度,但如果你有占位符 - 它会被剪切 这个修复了 Bootstap 3 问题 这么简单的修复 =) 最好不要使用 !important: .select2-container max-width: 100%;最小宽度:100%;由于问题通常是 Select2 太宽,因此只有 max-width 就足够了。【参考方案2】:

您可以使用窗口调整大小功能。

例子:

// Fix select2 width
$(window).on('resize', function() 
    $('.form-group').each(function() 
        var formGroup = $(this),
            formgroupWidth = formGroup.outerWidth();
        
        formGroup.find('.select2-container').css('width', formgroupWidth);
        
    );
);

【讨论】:

谢谢,但不是我想要做的——我需要在更改所选选项时调整大小,而不是调整窗口大小。最后我找不到可行的解决方案,所以没有使用 Select2。【参考方案3】:

只需要为网站做这样的事情

$(e).on("select2:closing", function(e) 
    if (e.hasOwnProperty('params') &&
        e.params.hasOwnProperty('args') && 
        e.params.args.hasOwnProperty('originalEvent') && 
        e.params.args.originalEvent.hasOwnProperty('target')) 
            var newWidth = $(e.params.args.originalEvent.target).width();
            var id = $(e.params.args.originalEvent.target).attr('id');
            var container = $("span[aria-labelledby=\""+id.split("-result")[0]+"-container"+"\"]");
            $(container).parents('span.select2').width(newWidth + 21);
    
);

这可能不是万无一失的,并且与当前的 API 相关联。但它会在下拉菜单关闭之前获取下拉菜单中元素的宽度,然后将其应用于容器。

需要注意的是,您可能需要浮动下拉项才能获得它们的实际大小。

.select2-results__option 
    float: left;
    clear: both;

【讨论】:

【参考方案4】:
$('.select2-search__field').attr('style','width:auto');

$('.select2-search__field[placeholder=""]').attr('style','width:10px');

【讨论】:

【参考方案5】:

我知道这是一篇旧帖子但是,我在使用 NMC 的代码时遇到了一个问题。

由于我无法评论他的回答,在使用他的代码后,我在使用 select2 下拉菜单后出现了一些烦人的滚动条,为了解决这个问题,我改用了 width auto。

.select2-container 
    width: auto !important;

【讨论】:

【参考方案6】:

要动态调整 select2 的大小,您可以使用 width: 'style' 选项,如下所示:

$('#field_'+field.name).select2(
    placeholder: "select a option...",
    maximumSelectionLength: 1000 , 
    allowClear: true,
    ...
    width: 'style',
    data: data
);

接下来你必须使用style="width:100%;" 作为你的选择标签的属性。

<select class="input-element-item fontsize13" id="select2" style="width:100%;" >
    <option></option>
</select>

【讨论】:

【参考方案7】:

除了响应宽度的问题,请阅读 Select2 的文档。一切都解释清楚了。

https://select2.org/appearance#container-width

<select class="js-example-responsive" style="width: 50%"></select>

$(".js-example-responsive").select2(
   width: 'resolve' // need to override the changed default
);

【讨论】:

以上是关于如何动态调整 select2 输入的大小,使其与所选选项的宽度相同?的主要内容,如果未能解决你的问题,请参考以下文章

如何允许自动调整UIButton的大小以满足间距约束

select2-jquery:如何动态设置最大选择大小

将选项卡从 QTabWidget 调整为内容 [重复]

Select2 - 从 js 使其只读(未禁用!)

如何使用 img HTML 调整输入的大小

如何加载 JSON 数据以将其与 select2 插件一起使用