选择 Harvesthq 动态调整宽度

Posted

技术标签:

【中文标题】选择 Harvesthq 动态调整宽度【英文标题】:Chosen harvesthq resize width dynamically 【发布时间】:2013-06-02 09:05:27 【问题描述】:

你怎么能有一个具有动态宽度样式的 Harvethq Chosen 下拉菜单?

默认情况下它有一个固定的宽度,如果你尝试用 CSS 修改它,你会遇到几个问题来达到一个好的结果。

【问题讨论】:

【参考方案1】:

This blog 建议如下:

$("select").chosen( width: '100%' ); // width in px, %, em, etc

【讨论】:

我有那个设置,但它不会根据容器调整大小:***.com/questions/26425643/… 此设置不适应动态宽度,除非您重新加载页面。它没有响应。 我认为调整 ChosenSelect 大小的问题在于,大小首先是在 javascript 中处理的。我强烈建议尽可能控制 CSS 中的宽度(在这种情况下是可能的)。 感谢***.com/users/2327634/vinay-raghu 的博客。我发现的这个解决方案已有几年的历史,因此请查看选择的文档以获取更多信息。但它所做的只是将其宽度设置为 100% 内联。当然,根据 Tormod 的评论,它所在的任何容器都需要对此做出响应。【参考方案2】:

这个对我有用,即使屏幕上有多个选择框:

$(document).ready(function()      
   resizeChosen();
   jQuery(window).on('resize', resizeChosen);
);

function resizeChosen() 
   $(".chosen-container").each(function() 
       $(this).attr('style', 'width: 100%');
   );          

2019 年。编辑:请记住,这个答案是 4 年前提出的,当时 jQuery 是流行的库并且被广泛使用。我的建议是对今年之后的所有内容都使用纯 JS。不要否定在编写它们时有效的代表历史答案。

【讨论】:

一行$(window).on("resize", function() $(".chosen-container").each(function() $(this).attr("style", "width: 100%"); ); );【参考方案3】:

我只想分享我的解决方案,了解如何在屏幕调整大小时调整所选下拉宽度:

首先你必须在你的 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

就是这样!

【讨论】:

你有什么解决办法吗? ***.com/questions/26425643/… @SearchForKnowledge:也许删除选定的 Dom 并重新附加(请参阅下面的答案)对您有用?【参考方案4】:

虽然上面提到了一部分,但我想指出以下解决方案:

.chosen-container 
    width: 100% !important;

这样,您选择的小部件将始终为 100%,并相应地调整大小。如果您需要将其设置为其他宽度,请更改百分比或用另一个元素封装选择本身,然后在该元素上设置宽度。

【讨论】:

【参考方案5】:

我有一个响应式表单,其中有很多带有媒体查询的 CSS 规则、!important 等,并且使用了类继承选项。在调整大小时,选择的 css 和父 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
               );

【讨论】:

【参考方案6】:

在@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);

在选择元素中添加“chosen-select-responsive”,如下:

.chosen-select-responsive 
width: 100% !important;

再说一次,这只是 MSánchez 的回答的基础!谢谢

【讨论】:

【参考方案7】:

我正在用 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%。

这完全符合我的要求。

【讨论】:

【参考方案8】:

只需在单引号内使用百分比宽度:

<select chosen  ... ></select>

可以在此处查看使用此技术选择的响应式:http://plnkr.co/edit/RMAe8c?p=preview

【讨论】:

【参考方案9】:

这就是我这样做的简单原因。

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
            
        );

【讨论】:

【参考方案10】:

我使用的方式是使用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%;

【讨论】:

请将 data-chosen 属性放入 html 中以使其可运行。【参考方案11】:

我用这个快速的片段修复了

	$(window).resize(function() 
		$(".chosen-select").chosen('destroy') ;
		$(".chosen-select").chosen() ;
	);

当然,还有更优雅的方式来处理它。但它有效。

【讨论】:

【参考方案12】:

对我来说,它真正起作用的是:

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");
    

在document.ready里面

dropdown.chosen().change(function() 
    resizeChosen();
);

其中 dropdown 是下拉列表的 id。您还可以在更改事件时设置宽度减小。 #dropdown_chosen 是通过以下方式创建的:

dropdown - 您的下拉列表 ID 追加_选择

【讨论】:

以上是关于选择 Harvesthq 动态调整宽度的主要内容,如果未能解决你的问题,请参考以下文章

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

在 UITableView 页脚中动态设置和调整标签大小

有没有办法通过 jquery 选择的插件动态 ajax 添加元素?

选择固定宽度的下拉菜单,在 IE 中截断内容

VBA选择工作表中的所有列并自动调整Excel 2010中的所有列宽度

Excel表怎么让单元格自动调整宽度?