Quando uso um select2 (entrada) no modal de inicialização, não consigo digitar nada nele. É como desativado? Fora do modal select2 funciona bem.
Exemplo de trabalho: http://jsfiddle.net/byJy8/1/ code:
<!-- Modal -->
<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="myModalLabel">Panel</h3>
</div>
<div class="modal-body" style="max-height: 800px">
<form class="form-horizontal">
<!-- Text input-->
<div class="control-group">
<label class="control-label" for="vdn_number">Numer</label>
<div class="controls">
<!-- seleect2 -->
<input name="vdn_number" type="hidden" id="vdn_number" class="input-large" required="" />
</div>
</div>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
<button class="btn btn-primary">Save changes</button>
</div>
</div>
e js:
$("#vdn_number").select2({
placeholder: "00000",
minimumInputLength: 2,
ajax: {
url: "getAjaxData/",
dataType: 'json',
type: "POST",
data: function (term, page) {
return {
q: term, // search term
col: 'vdn'
};
},
results: function (data) { // parse the results into the format expected by Select2.
// since we are using custom formatting functions we do not need to alter remote JSON data
return {results: data};
}
}
});
respostas:
aqui você pode encontrar uma solução rápida
e aqui está 'o caminho certo': Select2 não funciona quando incorporado em um modal de autoinicialização
dropdownParent
não deve estar na raiz div, mas mais profunda, por exemplo, a div com classemodal-content
, caso contrário, as posições suspensas ficam confusas ao rolar o modal.Respostas:
Ok, eu tenho que trabalhar.
mudança
para
(remova tabindex = "- 1" do modal)
fonte
Para Select2 v4:
Use
dropdownParent
para anexar o menu suspenso à caixa de diálogo modal, em vez do corpo HTML.Isso anexará o menu suspenso Select2 para que ele se enquadre no DOM do modal e não no corpo do HTML (o padrão). Consulte https://select2.org/dropdown#dropdown-placement
fonte
dropdownParent: $("#myModal")
, nãodropdownParent: "#myModal"
.dropdownParent
raiz do modal, é realmente melhor escolher o corpo, caso contrário, você recebe erros de posicionamento muito ruins ao rolar. Defino o meu para o div com classemodal-content
e funciona como um encanto!Eu encontrei uma solução para isso no github para select2
https://github.com/ivaynberg/select2/issues/1436
Para o bootstrap 3, a solução é:
O Bootstrap 4 renomeou o
enforceFocus
método para_enforceFocus
, então você precisará corrigi-lo:Explicação copiada do link acima:
fonte
$.fn.modal.Constructor.prototype.enforceFocus = $.noop;
Basta remover
tabindex="-1"
e adicionar estilooverflow:hidden
Aqui está um exemplo:
fonte
Esta é a minha solução com o select2 4.0.0. Basta substituir o css logo abaixo da importação select2.css. Verifique se o índice z é maior que o seu diálogo ou modal. Acabei de adicionar 2000 nos padrões. Porque o índice z dos meus diálogos é de cerca de 1000.
fonte
bootstrap.css
z-index de.popover
é definido como 1060, portanto, essa correção também funciona. Gosto porque é simples e resolve o problema da mesma maneira que o problema foi criado: z-index definido em uma folha de estilos.Defina o dropdownParent. Eu tive que colocá-lo no conteúdo .modal dentro do modal ou o texto acabaria centralizado.
fonte
.modal-content
realmente fazer a diferença. Obrigado por apontar 👍Resposta que funcionou para mim encontrada aqui: https://github.com/select2/select2-bootstrap-theme/issues/41
Também não requer a remoção do
tabindex
.fonte
De acordo com a documentação oficial do select2, esse problema ocorre porque os modais de Bootstrap tendem a roubar o foco de outros elementos fora do modal.
Por padrão, o Select2 anexa o menu suspenso ao elemento e é considerado "fora do modal".
Em vez disso, anexe o menu suspenso ao próprio modal com a configuração dropdownParent:
Consulte a referência: https://select2.org/trou Troubleshooting / common - problems
fonte
Eu tive o mesmo problema, a atualização
z-index
para.select2-container
deve fazer o truque. Verifique se o modalz-index
é menor que o select2.Atualizado: caso o código acima não funcione corretamente, remova também os índices de tabulação do seu modal, como sugerido pelo @breq
fonte
Basta usar esse código em Document.read ()
fonte
Este problema é o trabalho para mim Função Jquery única
fonte
alterar o arquivo select2.css
para
fonte
Apenas para entender melhor como os elementos tabindex funcionam para concluir a resposta aceita:
de: Mozilla Devlopper Network
fonte
Se você tiver um problema com o teclado do iPad que oculta o modal de autoinicialização enquanto clica na entrada select2 , você pode resolver isso adicionando a seguinte regra após a inicialização da
select2
entrada:Retirado de https://github.com/angular-ui/bootstrap/issues/1812#issuecomment-135119475
EDIT: Se suas opções não forem mostradas corretamente, você precisará usar o
dropdownParent
atributo ao inicializarselect2
:Boa sorte (:
fonte
Com base na resposta @pymarco que escrevi esta solução, ela não é perfeita, mas resolve o problema de foco select2 e mantém a sequência de guias funcionando dentro do modal
fonte
No meu caso, tive o mesmo problema com dois modais e tudo foi resolvido usando:
Como na edição do projeto # 41, um usuário disse.
fonte
este código está funcionando. Obrigado.
fonte
Ok, eu sei que estou atrasado para a festa. Mas deixe-me compartilhar com você o que funcionou para mim. As soluções tabindex e z-index não funcionaram para mim.
A configuração do pai do elemento select funcionou de acordo com os problemas comuns listados no site select2.
fonte
Se você usar o jquery mobile popup, deverá reescrever a função _handleDocumentFocusIn:
fonte
Eu tenho o mesmo problema com o
select2
inbootstrap modal
e a solução foi remover ooverflow-y: auto;
eoverflow: hidden
; de.modal-open
e.modal classes
Aqui está o exemplo do uso
jQuery
para remover ooverflow-y
:fonte
eu tive esse problema antes, estou usando o yii2 e resolvi dessa maneira
fonte
Eu tive um problema semi-relacionado em um aplicativo, por isso vou colocar no meu 2c.
Eu tenho vários modais com formulários contendo widgets select2. Abrir o modal A, em seguida, outro modal dentro do modal A, faria com que os widgets select2 dentro do modal B desaparecessem e falhassem na inicialização.
Cada um desses modais estava carregando os formulários via ajax.
A solução foi remover os formulários do Dom ao fechar um modal.
fonte
fonte
Resolvi isso geralmente no meu projeto sobrecarregando a
select2
função-. Agora ele verificará se não há dropdownParent e se a função é chamada em um elemento que possui um pai do tipodiv.modal
. Nesse caso, ele adicionará esse modal como pai do menu suspenso.Dessa forma, você não precisa especificá-lo toda vez que criar uma caixa de seleção-2-entrada.
fonte
Acabei de trabalhar incluindo select2.min.css
Experimente o iy
Meu html modal do bootstrap 3 é
fonte
você pode chamar o gatilho select2 novamente dentro do seu $ (documento)
fonte
Para usar o bootstrap 4.0 com o lado do servidor (dados ajax ou json inline), você precisa adicionar tudo isso:
e quando o modal estiver aberto, crie o select2:
fonte
No meu caso, eu fiz isso e funciona. Eu uso o pacote para carregá-lo e, neste caso, funcionou para mim
fonte