如何使用动态宽度样式获得harvesthq Chosen下拉列表?
默认情况下,它具有固定的宽度,如果您尝试使用CSS修改它,您将遇到一些问题以达到良好的效果。
答案 0 :(得分:36)
This blog建议如下:
$("select").chosen({ width: '100%' }); // width in px, %, em, etc
答案 1 :(得分:18)
这个对我有用,即使屏幕上有多个选择框:
$(document).ready(function(){
resizeChosen();
jQuery(window).on('resize', resizeChosen);
});
function resizeChosen() {
$(".chosen-container").each(function() {
$(this).attr('style', 'width: 100%');
});
}

2019年编辑:请记住,这个答案是在4年前制作的,当时jQuery是受欢迎的图书馆,当它被广泛使用时。我的建议是在今年之后使用纯JS。不要回答在他们写作时起作用的历史答案。
答案 2 :(得分:6)
我只想分享我的解决方案,了解如何在屏幕调整大小上调整所选下拉宽度:
首先,您必须在css上添加此样式:
#form_paciente{
width: 100% !important;
}
*#form_paciente *是您的选择ID。
之后在您的视图中添加此脚本:
window.addEventListener("resize", function() {
$('.chzn-container').innerWidth($('#selecciona_paciente_estadisticas_form').innerWidth());
$('.chzn-search input').innerWidth($('#selecciona_paciente_estadisticas_form').innerWidth()-12);
$('.chzn-drop').innerWidth($('#selecciona_paciente_estadisticas_form').innerWidth()-2);
}, false);
在这种情况下* #selecciona_paciente_estadisticas_form *是*#form_paciente *的形式父ID *
这就是全部!
答案 3 :(得分:2)
虽然上面部分提到过,但我想指出以下解决方案:
.chosen-container {
width: 100% !important;
}
这样,您选择的小部件将始终为100%,并相应地调整大小。如果你需要它是一些其他宽度,更改百分比或用另一个元素封装select本身,并改为在该元素上设置宽度。
答案 4 :(得分:1)
我有一个响应式表单,它有很多带有媒体查询的CSS规则,!important
等,并且正在使用选择的类继承选项。在调整大小时,选择和父css之间经常会发生冲突,事情就会破裂。我想出了一个对我有用的简单解决方案:在每个窗口重新调整大小时重新选择dom:
jQuery(document).ready(function() {
doResize();
jQuery(window).on('resize', doResize);
});
function doResize() {
// Parent website's code, that would also reorganize select elements on the page
jQuery("select.my-select").removeAttr("style"); // Remove display:none style added by chosen
jQuery("select.my-select").removeClass("chzn-done"); // Remove chzn-done class added by chosen
jQuery(".chzn-container").remove();
jQuery("select.my-select").chosen({
width: '100%',
disable_search_threshold: 10,
inherit_select_classes : true
});
}
答案 5 :(得分:1)
在@MSánchez的答案的基础上,我写了以下内容,以便更通用而不引用任何ID:
function processChosenContainer(myme) {
myme.innerWidth(myme.parent().innerWidth() - 30);
}
function processChosenSearch(myme) {
myme.innerWidth(myme.parent().parent().parent().innerWidth() - 13);
}
function processChosenDrop(myme) {
myme.innerWidth(myme.parent().parent().innerWidth() - 32);
}
window.addEventListener("resize", function () {
//******Adjust Container Width********/
var myObj = $('.chosen-container');
myObj.each(function () {
processChosenContainer($(this));
});
//******Adjust input search Width********/
var myObj2 = $('.chosen-search input');
myObj2.each(function () {
processChosenSearch($(this));
});
//******Adjust drop Width********/
var myObj3 = $('.chosen-drop');
myObj3.each(function () {
processChosenDrop($(this));
});
}, false);
还添加到select元素“selected-select-responsive”,如下所示:
.chosen-select-responsive {
width: 100% !important;
}
同样,这只是MSánchez答案的积累!日Thnx
答案 6 :(得分:0)
答案 7 :(得分:0)
这就是为什么我这么做的简单。
<强> JS:强>
// Create Chosen Select Menus
setUpSelectMenus();
// Reset Chosen Select Menus when window changes size
window.addEventListener( "resize", function() { setUpSelectMenus(); } );
/**
* Settings for Default Chosen Select Menus
*/
function setUpSelectMenus(){
$( '.chosen-select' )
.chosen( "destroy" ) // Need this to make responsive
.chosen(
{
allow_single_deselect : true,
disable_search_threshold: 10
}
);
}
答案 8 :(得分:0)
我使用的方法是使用inherit_select_class。
HTML
<select class="input-xxlarge" />
JS
jQuery("[data-chosen]").chosen({
inherit_select_classes : true
});
CSS
.input-xxlarge {
width:530px;
max-width: 100%;
}
答案 9 :(得分:0)
我已经修复了这个简短的片段
$(window).resize(function() {
$(".chosen-select").chosen('destroy') ;
$(".chosen-select").chosen() ;
});
允许有更多优雅的方式来处理它。但这有效。
答案 10 :(得分:0)
我正在用MVC5开发应用程序。
这是我所做的:
在我添加的.chosen-container
类中
width: 100% !important; // Assume that it is already 100%
max-width: 280px; // It is the max-width of bootsrap form-control-class
min-width: 0px; // It can go to 0
它可以从0到280像素,我认为宽度是100%。
这对我完全有效。
答案 11 :(得分:-1)
对我来说,真正起作用的是:
function resizeChosen() {
var chosen = $("#dropdown_chosen");
var max = chosen.parent().width();
var currentWidth = chosen.width();
var now = currentWidth + 20 / 100 * currentWidth;
if (now <= max) {
$("#dropdown_chosen").attr('style', "width: " + now + "px");
}
}
and inside document.ready
dropdown.chosen().change(function() {
resizeChosen();
});
其中dropdown是下拉列表的ID。您还可以在更改事件上设置宽度减少。 #dropdown_chosen的创建方式如下:
下拉列表 - 您的下拉列表ID 追加_chosen