updated multiple example chosen bootstrap jquery drop-down-menu width jquery-chosen

jquery - multiple - chosen:updated



Elegido harvesthq redimensiona el ancho dinĂ¡micamente (9)

¿Cómo se puede tener un menú desplegable de harvesthq Elegido con un estilo de ancho dinámico?

Por defecto tiene un ancho fijo y si intentas modificarlo con CSS tendrás varios problemas para alcanzar un buen resultado.


este funcionó para mí, incluso con múltiples cuadros de selección en la pantalla:

$(document).ready(function(){ resizeChosen(); jQuery(window).on(''resize'', resizeChosen); }); function resizeChosen() { $(".chosen-container").each(function() { $(this).attr(''style'', ''width: 100%''); }); }


Simplemente use ancho en porcentaje dentro de comillas simples:

<select chosen width="''100%''" ... ></select>

Se puede ver una respuesta elegida utilizando esta técnica aquí: http://plnkr.co/edit/RMAe8c?p=preview


Solo quiero compartir mi solución sobre cómo cambiar el tamaño del ancho desplegable elegido en el tamaño de la pantalla:

En primer lugar, debes agregar este estilo en tu CSS:

#form_paciente{ width: 100% !important; }

Donde * # form_paciente * es su ID de selección.

Después de eso, agregue este script en su vista:

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

En ese caso * # selecciona_paciente_estadisticas_form * es el ID principal del formulario de * # form_paciente *

¡Eso es todo!


Tenía una forma receptiva, que tenía muchas reglas de CSS con consultas de medios, !important , etc. y usaba la opción elegida con herencia de clase. Al cambiar el tamaño, a menudo había conflictos entre los css elegidos y los padres y las cosas se romperían. Se me ocurrió una solución simple que funcionó para mí: recrear el dom elegido en cada tamaño de ventana:

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


Para mí, lo que realmente funcionó fue esto:

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

y dentro document.ready

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

donde el menú desplegable es id del menú desplegable. También puede establecer la disminución de ancho en el evento de cambio. #dropdown_chosen se crea por elegido de la siguiente manera:

menú desplegable: su ID desplegable adjuntar _chosen


Sobre la base de la respuesta de @ MSánchez, escribí lo siguiente para ser más genérico sin referirme a ningún 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);

También agregue al elemento de selección "elegido-seleccionar-sensible" que es el siguiente:

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

De nuevo, ¡esto es solo una acumulación en la respuesta de MSánchez! thx


Aquí está el simple por qué lo hice.

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


Este blog recomienda lo siguiente:

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


Aunque mencionado en parte anteriormente, me gustaría señalar la siguiente solución:

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

De esta forma, el widget elegido siempre será 100% y cambiará el tamaño según corresponda. Si necesita que sea de otro ancho, cambie el porcentaje o encapsule la selección con otro elemento y establezca el ancho en ese elemento.