Comment pouvez-vous avoir un menu déroulant harvesthq Choisi avec un style de largeur dynamique?
Par défaut, il a une largeur fixe et si vous essayez de le modifier avec CSS, vous aurez plusieurs problèmes pour obtenir un bon résultat.
Je veux juste partager ma solution sur la façon de redimensionner la largeur de la liste déroulante choisie à l'écran:
Tout d'abord, vous devez ajouter ce style sur votre css:
#form_paciente{
width: 100% !important;
}
Où * # form_paciente * est votre identifiant de sélection.
Après cela, ajoutez ce script sur votre vue:
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);
Dans ce cas, * # selecciona_paciente_estadisticas_form * est l'ID parent du formulaire de * # form_paciente *.
C'est tout!
Ce blog recommande ce qui suit:
$("select").chosen({ width: '100%' }); // width in px, %, em, etc
celui-ci a fonctionné pour moi, même avec plusieurs cases de sélection à l'écran:
$(document).ready(function(){
resizeChosen();
jQuery(window).on('resize', resizeChosen);
});
function resizeChosen() {
$(".chosen-container").each(function() {
$(this).attr('style', 'width: 100%');
});
}
Année 2019. edit: Gardez à l'esprit que cette réponse a été faite il y a 4 ans, lorsque jQuery était une bibliothèque populaire et qu'elle était largement utilisée. Mon conseil est d'utiliser du JS pur pour tout ce qui est fait après cette année. Ne repoussez pas les réponses historiques qui ont fonctionné au moment où elles ont été écrites.
Bien que partiellement mentionné ci-dessus, je voudrais souligner la solution suivante:
.chosen-container {
width: 100% !important;
}
De cette façon, votre widget choisi sera toujours à 100% et sera redimensionné en conséquence. Si vous avez besoin d'une largeur différente, modifiez le pourcentage ou encapsulez la sélection elle-même avec un autre élément, puis définissez la largeur de cet élément.
S'appuyant sur la réponse de @ MSánchez, j'ai écrit ce qui suit pour être plus générique sans faire référence à aucun 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);
Ajoutez également à l'élément select "selected-select-responsive" qui se présente comme suit:
.chosen-select-responsive {
width: 100% !important;
}
Encore une fois, ceci n'est qu'une accumulation de la réponse de MSánchez! thnx
J'avais un formulaire responsive, qui contenait beaucoup de règles CSS avec des requêtes multimédia, !important
, etc. et que j'utilisais avec l'option choisie avec héritage de classe. Lors du redimensionnement, il y avait souvent des conflits entre les fichiers CSS choisis et parents et des problèmes se produisaient. Je suis arrivé avec une solution simple qui a fonctionné pour moi: recréer le dom choisi sur chaque fenêtre redimensionnée:
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
});
}
Utilisez simplement la largeur en pourcentage entre guillemets simples:
<select chosen width="'100%'" ... ></select>
Un responsive choisi en utilisant cette technique peut être vu ici: http://plnkr.co/edit/RMAe8c?p=preview
La façon dont j'utilise est d'utiliser 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%;
}
Voici le pourquoi simple je l'ai fait.
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
}
);
}