设置select2输入的宽度(通过Angular-ui指令)


151

我在使此plunkr(select2 + angulat-ui)工作时遇到问题。

http://plnkr.co/edit/NkdWUO?p=preview

在本地设置中,我得到了select2的工作,但是我无法按照docs中所述设置宽度。它太窄而无法使用。

在此处输入图片说明

谢谢。

编辑:别介意plnkr,我在这里http://jsfiddle.net/pEFy6/找到了一个工作的小提琴

似乎select2的行为是折叠到第一个元素的宽度。我可以通过bootstrap设置宽度。class="input-medium"仍然不确定为什么angular-ui不使用配置参数。


就您已经尝试过的内容而言,您能否更具体些?所选的库(select2所基于的库)将基于HTML / CSS中提供的宽度生成宽度。
亚当·格兰特

Answers:



231

在我的情况下,如果有零或更多药丸,则select2将正确打开。

但是,如果有一个或多个药丸,而我将它们全部删除,它将缩小到最小宽度。我的解决方案很简单:

$("#myselect").select2({ width: '100%' });      

7
如果使用的是select2版本4.0.0,则是最佳答案
Steve

1
为什么这比$(“#myselect”)。select2({width:'resolve'})更好;?(似乎是一样的)
里卡多·维加蒂

1
@RicardoVigatti:width:'resolve'在页面加载时仅工作一次,但在调整大小时不起作用。如果您使用的是响应式设计,那就行不通了
FabianSchöner16年

1
resolve不适用于我-100%可以。这是一个半小时,无可救药地寻找“已解决”的答案。谢谢:)
达拉格(Darraghh Enright)2016年

1
到目前为止,这是最好的答案。但是现在,对我而言,搜索字段并不能填满所有宽度。有任何简单的方法可以纠正此问题?
TNT

48

这是一个老问题,但新信息仍然值得发布...

从Select2 3.4.0版开始,有一个属性dropdownAutoWidth可以解决问题并处理所有奇怪的情况。请注意,默认情况下未启用。当用户进行选择时,它会动态调整大小;allowClear如果使用了该属性,它会增加宽度;它也会正确处理占位符文本。

$("#some_select_id").select2({
    dropdownAutoWidth : true
});

它工作得很好...除非您使用占位符,否则,如果您的选项小于占位符,则占位符文本将被截断:(
MrPowerGamerBR

24

选择2 V4.0.3

<select class="smartsearch" name="search" id="search" style="width:100%;"></select>

11

使用> select2> 4.0

$("select").select2({
  dropdownAutoWidth: true
});

这些其他无效:

  • dropdownCssClass:'bigdrop'
  • 宽度:“ 100%”
  • 宽度:“解决”

9

在脚本中添加方法容器css,如下所示:

$("#your_select_id").select2({
      containerCss : {"display":"block"}
});

它将选择的宽度设置为与div的宽度相同。


1
这对我来说成功了(我无法让select2使用Bootstrap 3自动调整大小)。虽然我不得不说这有点怪异。
mkataja 2014年

这使我走上正轨,我用minWidth代替了显示:$( '.opt-option-type-select' ).select2( { containerCss : { minWidth: '10em', }, } );
Nabil Kadimi

2

将宽度设置为“解决”对我不起作用。相反,我在选择中添加了“ width:100%”,并像这样修改了css:

.select2-offscreen {position: fixed !important;}

这是唯一对我有效的解决方案(我的版本是2.2.1),您的选择将占据所有可用的位置,比使用更好

class="input-medium"

从引导程序启动,因为即使在调整窗口大小之后,选择始终保留在容器中(响应)


感谢您的解决方案,但它仅在第一次加载时对我有用。一旦我选择了一个标签,然后单击另一个页面元素,select2输入将返回不正确的大小
Marklar 2014年

1

向您的select2函数添加宽度解析选项

$(document).ready(function() { 
        $("#myselect").select2({ width: 'resolve' });           
});

将以下CSS添加到样式表后

.select2-container {
width: 100% !important;
}

它将解决问题


0

您可以这样尝试。这个对我有用

$("#MISSION_ID").select2();

在隐藏/显示或ajax请求上,我们必须重新初始化select2插件

例如:

$("#offialNumberArea").show();
$("#eventNameArea").hide();

$('.selectCriteria').change(function(){
    var thisVal = $(this).val();
    if(thisVal == 'sailor'){
        $("#offialNumberArea").show();
        $("#eventNameArea").hide();
    }
    else
    {
        $("#offialNumberArea").hide();
        $("#eventNameArea").show();
        $("#MISSION_ID").select2();
    }
});

0

独立于select2的更简单的CSS解决方案

//HTML
<select id="" class="input-xlg">
</select>
<input type="text" id="" name="" value="" class="input-lg" />

//CSS
.input-xxsm {
  width: 40px!important; //for 2 digits 
}

.input-xsm {
  width: 60px!important; //for 4 digits 
}

.input-sm {
  width: 100px!important; //for short options   
}

.input-md {
  width: 160px!important; //for medium long options 
}

.input-lg {
  width: 220px!important; //for long options    
}

.input-xlg {
  width: 300px!important; //for very long options   
}

.input-xxlg {
  width: 100%!important; //100% of parent   
}

0

在最近一次使用Bootstrap 4构建的项目中,我尝试了上述所有方法,但没有任何效果。我的方法是通过使用jQuery编辑 CSS来获得100%的表格。

 // * Select2 4.0.7

$('.select2-multiple').select2({
    // theme: 'bootstrap4', //Doesn't work
    // width:'100%', //Doesn't work
    width: 'resolve'
});

//The Fix
$('.select2-w-100').parent().find('span')
    .removeClass('select2-container')
    .css("width", "100%")
    .css("flex-grow", "1")
    .css("box-sizing", "border-box")
    .css("display", "inline-block")
    .css("margin", "0")
    .css("position", "relative")
    .css("vertical-align", "middle")

工作演示

$('.select2-multiple').select2({
        // theme: 'bootstrap4', //Doesn't work
        // width:'100%',//Doens't work
        width: 'resolve'
    });
    //Fix the above style width:100%
    $('.select2-w-100').parent().find('span')
        .removeClass('select2-container')
        .css("width", "100%")
        .css("flex-grow", "1")
        .css("box-sizing", "border-box")
        .css("display", "inline-block")
        .css("margin", "0")
        .css("position", "relative")
        .css("vertical-align", "middle")
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.7/css/select2.min.css" rel="stylesheet" />

<div class="table-responsive">
    <table class="table">
        <thead>
        <tr>
            <th scope="col" class="w-50">#</th>
            <th scope="col" class="w-50">Trade Zones</th>
        </tr>
        </thead>
        <tbody>
        <tr>
            <td>
                1
            </td>
            <td>
                <select class="form-control select2-multiple select2-w-100" name="sellingFees[]"
                        multiple="multiple">
                    <option value="1">One</option>
                    <option value="1">Two</option>
                    <option value="1">Three</option>
                    <option value="1">Okay</option>
                </select>
            </td>
        </tr>
        </tbody>
    </table>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.7/js/select2.min.js"></script>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.