Quando escolhido é inicializado em uma entrada de seleção, ele adiciona [style = " display: none "] à tag de seleção e cria as várias tags div de que precisa, como segue.
<select name="country" id="country" style="display: none; " class="chzn-done">
<option selected="selected" value=""></option>
...
</select>
Tudo bem, mas teremos um problema se eu adicionar o atributo html5 'obrigatório' à minha tag de seleção, que produz a seguinte marcação após a inicialização escolhida:
<select name="country" id="country" required="required" style="display: none; " class="chzn-done">
<option selected="selected" value=""></option>
...
</select>
O problema ocorre quando o usuário envia o formulário sem selecionar um valor. Para o usuário, o navegador parece não fazer nada. Na verdade, ele está exibindo uma mensagem de erro para o usuário selecionar um valor, mas como o CSS instrui o navegador a não mostrar o elemento selecionado, a mensagem de erro também não aparece.
Isso está acontecendo no Chrome, não tenho certeza sobre o comportamento de outros navegadores.
Não cavei fundo o suficiente para sugerir uma solução, mas isso é um problema, pois começamos a incluir atributos html5 em nossos formulários.
Também percebi recentemente esse problema.
Obrigatório não é compatível com todos os navegadores, então criei um fallback para percorrer os elementos de um formulário no envio e verificar se há algum valor lá quando "obrigatório" está presente.
O problema ainda existe no cromo porque a seleção oculta não tem valor e não está alertando o usuário de acordo com os documentos do webkit:
http://trac.webkit.org/wiki/Styling%20Form%20Controls
"Uma mensagem de validação consiste em quatro elementos div com pseudo classes e alguns nós para o texto da mensagem. Você pode personalizar a aparência alterando o estilo dessas pseudo classes."
Estou pensando que a melhor maneira de lidar com isso é ter escolhido gerar a marcação adicional para sua seleção renderizada com classes semelhantes para que eles sejam estilizados por padrão no navegador, ou potencialmente anexar pseudoelementos a elementos que falharam na validação por usando as condições de falha apropriadas em CSS como: inválido.
Por enquanto, parece que sua única opção é ter um substituto no nível do DOM, como minha solução javascript. Posso fornecê-lo aqui se isso for útil, mas é realmente um substituto para o escolhido, não uma maneira de corrigir a estrutura escolhida.
Qual é o status deste problema? Tenho exatamente o mesmo problema com a última versão do Firefox (14.0.1)
Como os atributos HTML5 são cada vez mais usados em sites, isso deve ser abordado de uma forma ou de outra.
Eu também tenho o mesmo problema. Gostaria de saber sua solução alternativa.
Obrigado
Parece que há apenas um problema principal e um problema secundário que seria ótimo corrigir.
O primeiro item é o mais problemático. Isso poderia ser corrigido utilizando um método diferente de ocultação de elemento selecionado? Substituindo " display: none " no elemento de seleção oculto por "position: absolute; visibility: hidden;" chega bem perto - embora isso dependa mais do CSS circundante ...
Porém, não funciona para o Webkit. Parece que o sinalizador de erro herda os estilos da caixa de seleção no webkit (Chrome), portanto, se você definir opacidade: .5, o sinalizador também será opacidade .5 (como um exemplo). desapontamento.
Mais um - o Opera funciona corretamente como está, mas se eu mudar para o CSS baseado na posição acima, ele não funcionará direito. Que dor.
Desculpe por enviar spam. Mas acho que entendi! Se você envolver o elemento selecionado em uma extensão e usar este CSS no wrapper (e remover display: none no elemento selecionado):
width: 0px;
height: 0px;
overflow: hidden;
display: inline-block;
position: absolute;
Você receberá a mensagem de erro e não interromperá o fluxo da página ao mesmo tempo. O único problema é que você tem que deixar a caixa visível para ver a mensagem de erro porque o Firefox e o WebKit irão esconder a mensagem se você não fizer isso. Isso faz com que a caixa de seleção receba guias por meio do formulário.
A maneira de contornar isso pode ser alternar a exibição de nenhum para bloco embutido no envio (ou o evento 'inválido') e, em seguida, alterná-lo de volta em determinados eventos de entrada (como o mouse pressionado ou pressionamento de tecla).
Há também um pequeno problema de posicionamento, resolvido forçando a posição a ficar diretamente sob a caixa escolhida.
Seria bom ver algum tipo de suporte integrado para isso, se possível.
Eu escrevi um patch aqui: https://github.com/adcSTUDIO/chosen
Pode não ser robusto o suficiente para inclusão, mas sinta-se à vontade para testá-lo.
Obrigado @CaptainN! Vou dar uma olhada!
@CaptainN , comecei a trabalhar - obrigado por fazer essas alterações. No entanto, você sabe como permitir que a largura dos pop-ups de erro exceda a largura das próprias caixas de seleção? Em alguns dos meus elementos selecionados menores, a mensagem de erro é muito fina, o que não parece muito bom e pode até ser difícil de ler em alguns.
Se não, tudo bem, você já ajudou muito com isso. Obrigado novamente!
@caderade Não tenho certeza de como consertar esse problema. Eu tentei overflow: visible e algumas outras coisas, e ainda aparece curto Vou tentar mais algumas coisas, mas isso parece ser um problema com o Firefox que pode não ter uma solução alternativa (essas sinalizações são geralmente muito difíceis de resolver com, junto com aquele brilho, que eu ainda não encontrei uma maneira de estilizar completamente).
@CaptainN : Muito bom.
Funciona muito bem para mim no Firefox 17 e Chrome 23.
No IE 8 + 9 (que não oferece suporte a validação de formulário HTML5 de forma alguma), ao alterar o valor do campo, recebo um erro de JavaScript por causa do seletor :valid
desconhecido sendo usado. Assim, o script é abortado e o formulário não fica feio de forma alguma, o que eu esperava no IE. : smirk: Não apontar um erro seria melhor, no entanto. Qualquer ideia?
Oh, que chatice. Na verdade, acho que o jQuery me protegeria mais! Vou ter que adicionar uma verificação do IE ou algo assim ...
Kevin N.
@CaptainN Tem o problema para mim também no Chrome. Não tinha certeza se você pensava que era apenas um problema do Firefox ou não. Mas cara, muito obrigado de novo, cara. Otimo trabalho! Deixe-nos saber se você alguma vez conseguir resolver o problema da largura.
Parece que o jQuery tem algum suporte embutido para pseudo-seletor e um sistema de ganchos para que os plug-ins possam adicionar os seus próprios e, se não encontrar nenhum, ele o passa para a implementação subjacente - então: obrigatório e: válido lança um erro no IE (e provavelmente em algumas versões do Safari) se eles não foram polyfilled. Vou ver se consigo lançar um tipo alternativo de verificação lá, em vez de usar os pseudo seletores. Parece que posso apenas verificar attr ("obrigatório") para substituir: obrigatório - provavelmente terei que fazer algum tipo de detecção de recurso para: válido - talvez uma verificação para uma propriedade .oninvalid?
Ok, recebi um novo patch que corrige o erro do IE (e deve corrigi-lo em qualquer outro navegador também). Este patch muda algumas coisas (nada que você deva notar). Aqui estão minhas notas:
@CaptainN Para seu problema com o UglifyJS, certifique-se de instalar a versão 1, pois a versão 2 não é BC. # 915 está atualizando o packages.json
Como eu mudo a versão usando npm?
@CaptainN npm install uglify-js@1
para forçar o IIRC versão 1 (mas não sou um especialista em nó). A outra solução é verificar meu branch e executar npm install
com o arquivo packages.json atualizado.
Consegui construir as versões do uglified no meu mac de trabalho (talvez tenha uma versão mais antiga do uglify-js?). Eles agora estão atualizados em meu repo.
Estou usando apenas o sabor jQuery atualmente. Nenhum erro de script no IE8 / 9 mais. : +1: por ver esse recurso no upstream em breve.
Também estamos enfrentando esse problema. Existe uma solução alternativa, exceto desativar a validação de HTML5?
@CaptainN corrigiu pelo que li. Então eu tentei seu arquivo escolhido.jquery.js no branch master. Mas dá erro js de msie indefinido.
Eu pensei que tinha consertado isso. Essa bifurcação foi há um tempo atrás e pode precisar ser atualizada. Vou ver se consigo fazer isso esta semana e ver o bug do IE.
Eu sincronizei este upstream e não vi nenhum aviso de erro indefinido no IE. Tente meu repositório novamente e entre em contato se o problema persistir. (Lamentamos que demorou tanto tempo)
Obrigado!
: +1:
Alguém poderia resumir isso para mim? Existe um fork ou patch ao redor que está pronto para produção?
Há uma solicitação de pull que vem junto com isso - # 900 que puxaria meu garfo adcSTUDIO / Chosen.
Em vez de ocultar a caixa de seleção original - quando a seleção é necessária e há um erro, o patch posiciona a caixa de seleção abaixo da caixa de seleção Escolhida, de modo que a mensagem de erro HTML5 embutida apareça no local correto. Editar: provavelmente devo observar que, se a caixa não estiver marcada como "obrigatória" e nunca for invalidada, o comportamento existente será preservado.
Essa solicitação de pull não adiciona nenhuma funcionalidade adicional além de fazer com que os avisos de erro embutidos no HTML5 sejam exibidos.
Obrigado Kevin!
29/07/2013 Kevin Newman [email protected]
Há uma solicitação de pull que vem junto com isso - # 900 https://github.com/harvesthq/chosen/issues/900 que puxaria meu garfo adcSTUDIO / Chosen.
Em vez de ocultar a caixa de seleção original - quando a seleção for necessária,
e quando há um erro, o patch posiciona a caixa de seleção abaixo
a caixa de seleção escolhida, de modo que a mensagem de erro HTML5 embutida apareça em
o local correto.Esta solicitação pull não adiciona nenhuma funcionalidade adicional fora do
fazendo com que os avisos de erro embutidos no HTML5 sejam exibidos.-
Responda a este e-mail diretamente ou visualize-o em Gi tHubhttps: //github.com/harvesthq/chosen/issues/515#issuecomment -21750086
.
Urs Bräm
sites macht
lic. phil. eu
Theaterplatz 2
3011 Bern
Tel. Büro: +41 31 311 73 61
Tel. Mobil e Combox: +41 76 327 01 51
http://www.ursbraem.ch
Privat:
Beundenfeldstr. 50
3013 Bern
P +41 31 301 41 90
Oi,
Acabei de obter a versão mais recente (1.0) e ainda estou tendo esse problema. Quando escolhido é adicionado a uma caixa de seleção com o atributo necessário, no Firefox, a dica de ferramenta "selecione um item da lista" aparece no canto superior esquerdo da tela. No Chrome, nada acontece. A solicitação de pull não está integrada com a versão 1.0? Como posso baixar esse patch? Desculpe, não estou mais familiarizado com o Github e agradeço antecipadamente!
Não acho que minhas alterações foram mescladas. Meu garfo provavelmente precisa ser atualizado também - já faz um tempo.
Ah, isso é muito ruim. Alguma ideia se está no pipeline do branch master? Alguma sugestão para fazer isso funcionar nesse meio tempo?
Não tenho ideia se eles planejam integrar isso ao master, mas o que você pode fazer é usar meu fork e sincronizá-lo com o master, e isso vai te dar uma atualização do pull de seu repositório, com minhas alterações aplicadas (assumindo sem conflitos) - ou apenas use meu fork um tanto desatualizado. Infelizmente, não terei tempo para atualizar meu fork no curto prazo.
Aqui está meu garfo btw: https://github.com/adcSTUDIO/chosen
Obrigado, Kevin.
Yaron Guez
Arquiteto Chefe de Software
MedAdaptics - http://medadaptics.com
(781) 767-7434
Na quarta-feira, 27 de novembro de 2013 às 12h35, Kevin Newman [email protected] :
Aqui está meu garfo btw: https://github.com/adcSTUDIO/chosen
-
Responda a este e-mail diretamente ou visualize-o em Gi tHubhttps: //github.com/harvesthq/chosen/issues/515#issuecomment -29403732
.
@CaptainN Você abriu um PR com suas mudanças? Não vejo nenhum link para um PR nesta discussão. E se não houver PR para revisá-lo, é improvável que seu fork seja revisado (os mantenedores revisam as contribuições enviadas, o que já requer tempo, então eles não tentarão encontrar contribuições não enviadas)
Há um PR # 900 - é uma bagunça - provavelmente poderia rebase-o em algum ponto e limpá-lo se ajudasse.
Olá!
Tudo é muito, muito simples, e você não precisa de 2 anos para discutir isso :)
@CaptainN @yaronguez @stof @kenearley
Para adicionar a exibição correta de uma mensagem de erro do navegador com escolhido para <selecionar necessário> quando o usuário não escolhe nenhuma opção,
Se você não quiser perder tempo editando o código do plugin, basta adicionar algo como setAttribute ('style', 'display: visible; position: absolute; clip: rect (0,0,0,0)'); após inicializar o plugin escolhido.
Exemplo:
function InitChosen () { $ ('select.chzn'). each (função (índice) { $ (this) .chosen ({ disable_search_threshold: 5, no_results_text: "Ничего не найдено!" }); this.setAttribute ('style', 'display: visible; position: absolute; clip: rect (0,0,0,0)'); }); }
Isso é tudo. Aaaaaand agora ... DISCO! :)
** Para navegadores que suportam o atributo "obrigatório".
@Aharito Não vamos resolver o problema de ordem de tabulação ao fazer isso?
Obrigado @Aharito , está funcionando muito bem com a v1.1.0 escolhida, basta substituir $('select.chzn')
por $('.chosen-select')
.
Pensei ter tentado aquele truque do clipe: rect, e encontrei algum problema com ele. Talvez com um navegador mais antigo? Acho que está funcionando agora, ótimo.
Acho que também pode haver problemas de tabulação com a minha solução (não me lembro, já faz um tempo) - reduzi o impacto aplicando apenas o patch aos campos que apresentam o atributo obrigatório.
Padronizamos isso em todas as chamadas para $().chosen()
$.fn.oldChosen = $.fn.chosen
$.fn.chosen = function(options) {
var select = $(this)
, is_creating_chosen = !options || _.isObject(options)
if (is_creating_chosen && select.css('position') === 'absolute') {
// if we are creating a chosen and the select already has the appropriate styles added
// we remove those (so that the select hasn't got a crazy width), then create the chosen
// then we re-add them later
select.removeAttr('style')
}
var ret = select.oldChosen(options)
if (is_creating_chosen) {
// https://github.com/harvesthq/chosen/issues/515#issuecomment-33214050
// only do this if we are initializing chosen (no params, or object params) not calling a method
select.attr('style','display:visible; position:absolute; clip:rect(0,0,0,0)');
}
return ret
}
@ghiculescu Isso não resolve o problema de tabulação ou shift-tab no select, resolve?
@DASPRiD não .
que tal isso como uma possível solução de encobrimento.
não é perfeito, mas, na verdade, impede que a seleção original apareça passando o foco para a próxima caixa de diálogo escolhida, mas talvez seja um passo mais perto
"escolhido-selecionar" é apenas um seletor para as seleções que tenho com uma classe em particular, não tenho certeza se "clique em foco" cobre todos os respectivos eventos que devo conectar, mas talvez alguém possa dizer o que mais está faltando?
também é possível que eu não tenha entendido algo sobre a estrutura html escolhida e find ("a") seja muito liberal, alguém tem mais experiência?
$(".chosen-select").on("click focus",function(event){
$(this).next(".chosen-container").find("a").trigger(event.type);
});
oh, e certamente " display: visible " deveria ser " display: block " ou algo assim? causa visibilidade: visível é válido, mas exibição: visível Tenho certeza que não
o que descobri é que se você tiver vários selects próximos um do outro no mesmo contêiner, isso os desloca todos para o local errado, então a posição: absoluto faz com que a mensagem de validação apareça na posição errada.
Resolvi isso desanexando e recolocando no recipiente escolhido, assim
$(".chosen-select").each(function(){
$(this).next(".chosen-container").prepend($(this).detach());
});
a solução acima, após mais investigação, mostra que desativa a tabulação pelos campos completamente e não consigo resolver o problema, no entanto, elimina o problema do select aparecer quando você está tabulando, então é mais problema importante na minha mente, posso viver sem tabulação se puder para não quebrar a tela, visto que mais pessoas estão usando dispositivos móveis e não estão tabulando de qualquer maneira, isso afeta apenas usuários de desktop, ainda importante, mas relativamente falando, gerenciável.
no entanto, se alguém resolver isso de alguma forma, estou muito interessado em descobrir.
ok, então, além do que estava tentando antes, descobri que os eventos escolhidos estavam usando e decidi que quando fizesse qualquer evento no select agora oculto, poderia sequestrá-lo e acionar um evento escolhido para abri-lo.
eu acho que funciona bem.
$(".chosen-select").each(function(){
// take each select and put it as a child of the chosen container
// this mean it'll position any validation messages correctly
$(this).next(".chosen-container").prepend($(this).detach());
// apply all the styles, personally, I've added this to my stylesheet
$(this).attr("style","display:block!important; position:absolute; clip:rect(0,0,0,0)");
// to all of these events, trigger the chosen to open and receive focus
$(this).on("click focus keyup",function(event){
$(this).closest(".chosen-container").trigger("mousedown.chosen");
});
});
Acho que esta é a melhor versão que tenho até agora. Felizmente, isso resolve o problema da tabulação para frente, ainda há a tabulação reversa, você não pode alternar para trás em uma seleção escolhida porque, no segundo que você tabular no elemento de seleção, você imediatamente refocaliza no contêiner escolhido novamente, o que significa que você ' está preso em apenas ser capaz de avançar com tabulação.
Pode ser uma ideia manter o controle do elemento anterior e se o elemento que anteriormente tinha o foco da guia estava na frente do elemento em foco atual, você está retrocedendo e, em seguida, pule o redirecionamento para o escolhido e selecione a guia anterior, mas não tenho certeza de como fazer isso.
Depois de uma longa leitura, pensei ter experimentado as sugestões apresentadas ao longo dos anos.
Infelizmente, não consegui fazer o código do @christhomas funcionar. Eu o invoco em uma função de envio sem resultados visíveis (sem erros também).
A boa notícia é que a nova função de @ghiculescu funciona como uma delícia, pois ainda posso usar o arquivo CDN escolhido e apenas usar a função no meu arquivo js.
@DASPRiD @charettes o que você quer dizer com guia não funciona com a função modificada? Parece estar funcionando para mim
Fácil de adicionar tabindex: -1 para selecionar o snippet de @ghiculescu , resolvendo o problema de tabulação.
Exemplo: http://jsfiddle.net/hq7b426j/
Eu pude ver o problema agora! Sua adição funciona muito bem @andreialecu
Havia uma outra adição necessária a propósito. No iPhone ou em outros dispositivos sem suporte, o violino não funcionava corretamente. Chosen se desativa no iPhone e deixa <select>
inalterado, e o código no violino acima iria ocultá-lo, não deixando nenhuma maneira de interagir com o select.
Este violino corrige isso (adicionando um display: none check):
http://jsfiddle.net/hq7b426j/1/
Ah isso é ainda melhor !! Obrigado! Ainda estou testando também, mas postarei se algo mais surgir
@CaptainN informe que tenho o mesmo problema. wr eu preciso colocar esse código. Estou usando o tema inspina do wrapbootstrap.
@ vidhyaprakash85 Não tenho certeza do que você quer dizer. Eu tinha feito o fork há muito tempo e escrevi uma solicitação pull (# 900), mas os repositórios estão fora de sincronia agora e meu fork está muito desatualizado. Você pode encontrá-lo aqui se ajudar: https://github.com/adcSTUDIO/chosen
já estou usando https://github.com/harvesthq/chosen como fazer isso :(
@andreialecu seu código funciona bem! obrigado!!!
Obrigado @christhomas, seu código funcionou muito bem: dancer:
Nem @christhomas ou @ghiculescu funcionaram para mim usando uma seleção multi-agrupada. deixando para a validação do servidor por enquanto.
Quando experimentei o patch @ghiculescu , funcionou, exceto que um pergaminho era exibido o tempo todo, abaixo da caixa de seleção.
Quando tentei o patch @christhomas, o pop-up apareceu sem a caixa de pesquisa abrir.
Tive que modificar o script de @ghiculescu para poder chamar escolhido duas vezes:
target.find('select')
.chosen('destroy')
.chosen({disable_search_threshold: 10})
Caso contrário, a 2ª viagem removeu o estilo que foi adicionado na primeira:
$.fn.oldChosen = $.fn.chosen
$.fn.chosen = function(options) {
var select = $(this)
, is_creating_chosen = !!options
var style = 'display:visible; position:absolute; clip:rect(0,0,0,0);'
if (is_creating_chosen && select.css('position') === 'absolute' && select.attr('style') != style) {
// if we are creating a chosen and the select already has the appropriate styles added
// we remove those (so that the select hasn't got a crazy width), then create the chosen
// then we re-add them later
select.removeAttr('style')
}
var ret = select.oldChosen(options)
// only act if the select has display: none, otherwise chosen is unsupported (iPhone, etc)
if (is_creating_chosen && select.css('display') === 'none') {
// https://github.com/harvesthq/chosen/issues/515#issuecomment-33214050
// only do this if we are initializing chosen (no params, or object params) not calling a method
select.attr('style', style);
select.attr('tabindex', -1);
}
return ret
}
Acabei de adicionar esta condição extra ao primeiro se: && select.attr('style') != style
@doganmeh Funciona muito bem no Chrome e em dispositivos móveis (com Chrome), mas testado no Firefox 53.0 onde não funciona
Mesmo este http://jsfiddle.net/hq7b426j/1/ não funciona no Firefox 53.0
Hmmm, mas isso parece mais um problema do Firefox porque se você clicar no botão mais vezes, verá que o Firefox tenta exibir a mensagem (mas isso nunca é processado completamente)
Eu usei essa solução. É muito simples e funciona perfeitamente:
<style>
select.submitted:invalid + .chosen-container{
border-color: red !important;
}
</style>
$('#yourSelector').chosen({
no_results_text: "yourText",
disable_search_threshold: 9,
search_contains: true
//your parameters
}).on('invalid', function(){
$(this).addClass('submitted');
});
parece que isso não funciona se você tiver escolhido com várias seleções:
http://jsfiddle.net/jeromax/o5a8aogh/
Eu consertei isso.
`
$ .fn.oldChosen = $ .fn.chosen
$ .fn.chosen = função (opções) {
var select = $ (this),
is_creating_chosen = !! options;
if (is_creating_chosen && select.css ('position') === 'absoluto') {
// se estivermos criando um escolhido e o select já tiver os estilos apropriados adicionados
// nós os removemos (para que o select não tenha uma largura absurda), então criamos o escolhido
// então nós os adicionamos novamente mais tarde
select.removeAttr ('estilo');
}
var ret = select.oldChosen (opções)
// age apenas se o select tiver display: none, caso contrário, o escolhido não é compatível (iPhone, etc)
if (is_creating_chosen && select.css ('display') === 'none') {
// https://github.com/harvesthq/chosen/issues/515#issuecomment -33214050
// só faça isso se estiver inicializando escolhido (sem parâmetros ou parâmetros de objeto) e não chamando um método
$(this).each(function(index){
if($(this)[0].multiple==true){
$(this).attr('style','display:visible; width:0px; height:0px; margin-top:25px; position:absolute; clip:rect(0,0,0,0)');
}else{
$(this).attr("style","display:visible; position:absolute; clip:rect(0,0,0,0)");
}
})
select.attr ('tabindex', -2);
}
retornar ret
}
`
+1
Alguém pode consertar isso? É um problema muito antigo e uma funcionalidade muito importante hoje em dia. Obrigada.
Não funciona na versão mais recente.
Isso parece estar quebrando a validação de formulário do angular.js ao usar o angular escolhido também.
É 2018 e ainda estamos tendo o mesmo problema. É um inferno como os padrões HTML não podem funcionar corretamente e integrados com plug-ins externos. Tempos loucos :)
Isso também está quebrando o plugin escolhido do Drupal. Veja https://www.drupal.org/project/chosen/issues/2705891
Não foi possível encontrar uma solução adequada para isso além de uma solução alternativa:
<div class="form__select">
<select class="chosen">
<!-- options -->
</select>
</div>
.form__select {
position: relative;
}
.form__select .chosen {
display: block !important;
height: 0;
position: absolute;
left: 35px;
bottom: 0;
outline: none;
border-color: white;
pointer-events: none;
}
Se estiver usando Escolhido para todos os elementos select
, você pode usar este CSS para torná-lo visível (para DOM), mas sem opacidade, sem altura, posição absoluta.
Esses seletores CSS são direcionados a elementos de seleção inválidos, com um deles direcionado a multiple
adicionando 15px
margin-top
para centralizá-lo nos elementos multisseleção.
select:invalid {
height: 0px !important;
opacity: 0 !important;
position: absolute !important;
display: flex !important;
}
select:invalid[multiple] {
margin-top: 15px !important;
}
Demonstração: http://jsfiddle.net/tripflex/2zdeu9oc/
MAS REALMENTE ... isso já deve ser tratado pela lib Chosen.JS
Esta é minha solução alternativa, se for útil:
// Initialise Chosen
$(function () {
$('select').chosen();
});
// Place the original input behind the Chosen input, matching the height and width so that the warning appears in the correct position
$('select').on('chosen:ready', function () {
const height = $(this).next('.chosen-container').height();
const width = $(this).next('.chosen-container').width();
$(this).css({
'position': 'absolute',
'height': height,
'width': width,
'opacity': 0
})
.show();
});
@jonathanbull você pode mostrar dentro do contexto? Tentei sua solução e não funcionou.
@AndrewSouthpaw Este é o meu código, as correções funcionam bem para mim :)
$("#select").val([]); // disable default selection by browser
$('#select').on('chosen:ready', function(evt, params, chosen) {
$(this).css({'position': 'absolute', 'height': 0, 'opacity': 0}).show();
});
$("#select").chosen();
Estou usando um código ligeiramente diferente (com base no código aqui):
$('.chosen-select').on("chosen:ready", function (evt, data) {
$(this)
.addClass('chosen_hidden')
.attr('tabindex', '-1')
.prependTo(data.chosen.container)
.show()
})
.chosen({width: '100%'})
.chosen_hidden {
position: absolute;
top: 0;
bottom: 0;
max-height: 100%; // required for IE 10
// **not required** opacity: 0;
}
Ele não controla a ação 'destruir', mas posiciona bem a mensagem de erro e parece funcionar no Firefox e no Chromiun. Como o seletor original não está oculto, a borda de destaque do erro fica visível. Atualização : com max-height
também funciona no IE. Outra atualização : adicione tabindex -1 para garantir que não receba o foco. (embora ainda seja focalizável e receba mensagens de erro).
Houve um PR aberto que resolve isso, mas acho que ele se perdeu desde que o outro tópico que visava foi fechado. Veja # 2594
@jhedstrom adoraria ver essa fusão. Você sabe se esta biblioteca ainda é mantida?
Usei algo semelhante à solução de
https://github.com/harvesthq/chosen/pull/2594#issuecomment -714806139
Obrigado @jhedstrom por me apontar na direção certa!
Comentários muito úteis
+1
Alguém pode consertar isso? É um problema muito antigo e uma funcionalidade muito importante hoje em dia. Obrigada.