Chosen: Correção para problema de largura zero

Criado em 30 jan. 2012  ·  14Comentários  ·  Fonte: harvesthq/chosen

Eu gosto do Chosen, mas porque eu uso muito ajax e painéis ocultos, tenho tido problemas infernais com o Chosen renderizando os selects com largura zero, aparentemente porque a largura está sendo calculada antes que o select seja visível.

Eu adicionei uma linha que parece corrigir esse problema (ou fornecer uma solução alternativa), pelo menos no meu caso.

Na função Chosen.prototype.set_up_html, depois de "this.f_width = this.form_field_jq.outerWidth ();", adicione:

  if (this.f_width==0) this.f_width = this.form_field_jq.css("width");

Obviamente, isso só funciona se a largura for definida explicitamente em css. Mas, no meu caso, resolve o problema. Uma solução melhor seria bem-vinda.

Comentários muito úteis

Espero que isso ajude alguém, pois funciona bem no meu projeto.

Acabei de adicionar a seguinte regra CSS:

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

Todos 14 comentários

Duplicado de # 92.

Tive que fazer esta alteração na correção:
if (/px/.test(this.form_field_jq.css("width "))) {
this.f_width = this.form_field_jq.css ("largura"). replace ("px", "");
} outro {
this.f_width = this.form_field_jq.css ("largura");
}
desde this.form_field_jq.css ("largura"); estava retornando a largura com px no final

Eu tenho uma solução e isso funciona bem no meu projeto:

this.f_width = this.form_field_jq.outerWidth (); // adicione o código abaixo nesta linha em selected.jqeury.js

  if (this.f_width==0){ 
      var cloneObj= this.form_field_jq.clone();
      cloneObj.removeAttr('id');
      $(document.body).append(cloneObj);
      var w = cloneObj.width();
      cloneObj.remove();
      this.f_width=w;
  }

Espero que isso ajude alguém, pois funciona bem no meu projeto.

Acabei de adicionar a seguinte regra CSS:

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

Obrigado fabioduque! Definir css para o contêiner escolhido resolveu meu problema!

Você realmente não precisa definir a largura em CSS. Você pode fazer isso corretamente ao inicializar o Chosen.

$(".chosen-select").chosen({ width: '100%' }); // any acceptable CSS width will work

Na verdade, eu criei um KO bindingHandler para gerar meus elementos escolhidos, e nem todos eles têm 100% de largura, então CSS é o caminho certo para mim. Embora eu pudesse definir a largura como uma opção em meu bindingHandler.

Obrigado @fabioduque Também funcionou para mim!

@pfiller , obrigado! isso resolveu meu problema.

por que isso acontece às vezes? :(

Usei a abordagem css, porque não queria olhar todos os lugares que usei escolhidos (e outros desenvolvedores podem ter o mesmo problema ao construir novas visualizações). Portanto, o css corrige o problema globalmente. Obrigado @fabioduque

Eu estava tendo esse problema com a lógica condicional em um dos meus plug-ins do WordPress ... especificamente com a largura sendo definida como 0px ... mesmo após o init (que eu enfileiro campos escolhidos com chosen:ready então se já for init e eu escondo o div pai) ... mas de qualquer forma, isso é o que eu usei para corrigir isso quando meu código jQuery é executado para mostrar o elemento DIV pai antes de executar chosen:updated

// This is the original select field
$field = $( '#' + field );

// This is the select field wrapper that I hide (just shown for reference)
$( '.fieldset-' + field ).show();

// Chosen container ID will be original select element ID + _chosen
var $chosen_container = $( '#' + field + '_chosen' );
if( $chosen_container && $chosen_container.width() === 0 ){
    $chosen_container.css( 'width', '100%' );
}

$field.trigger( 'chosen:updated' );

Se mais alguém ainda estiver tendo esse problema, verifique quando você está chamando $ (".. Escolhido-select"). Escolhido (). Eu tinha uma lista de chamadas de função javascript no carregamento da página, quando movi a chamada .chosen () para o topo da lista, ela aplicou a largura corretamente, sem mais largura zero. As funções que movi acima estavam recuperando alguns dados e fazendo muitas operações dom.

por que estou tendo 2 ícones de pesquisa, tentei ambas as soluções acima-
Screenshot from 2019-08-23 00-34-17

Esta página foi útil?
0 / 5 - 0 avaliações