Alguma ideia de como fazer com que o DatePicker apareça no final da caixa de texto associada, em vez de diretamente abaixo dela? O que tende a acontecer é que a caixa de texto fica na parte inferior da página e o DatePicker muda para cima para dar conta disso e cobre totalmente a caixa de texto. Se o usuário quiser digitar a data em vez de selecioná-la, não pode. Prefiro que apareça logo após a caixa de texto, para que não importe como se ajusta verticalmente.
Alguma ideia de como controlar o posicionamento? Não vi nenhuma configuração para o widget e não tive sorte ao ajustar as configurações de CSS, mas poderia facilmente estar faltando alguma coisa.
javascript
jquery
jquery-ui
jquery-ui-datepicker
gfrizzle
fonte
fonte
Respostas:
A resposta aceita para esta pergunta, na verdade, não é para o jQuery UI Datepicker. Para alterar a posição do jQuery UI Datepicker, basta modificar .ui-datepicker no arquivo css. O tamanho do Datepicker também pode ser alterado desta forma, basta ajustar o tamanho da fonte.
fonte
Aqui está o que estou usando:
Você também pode querer adicionar um pouco mais à margem esquerda para que não fique exatamente no campo de entrada.
fonte
$(this).position(my:'left top', at:'left bottom', of:'#altField')
(já que estou usando aaltField
opção doEu faço isso diretamente no CSS:
Meus campos de entrada de data têm 100 px de largura. Também adicionei o Z-index para que o calendário também apareça acima dos pop-ups AJAX.
Eu não modifico o arquivo CSS jquery-ui; Eu sobrecarrego a classe em meu arquivo CSS principal, então posso alterar o tema ou atualizar o widget sem ter que inserir novamente meus mods específicos.
fonte
Aqui está minha variação de alinhamento do calendário Datepicker.
Eu acho que é muito bom, porque você pode controlar o posicionamento através do jQuery UI Position util.
Uma restrição: jquery.ui.position.js obrigatório.
Código:
fonte
afterShow
método.Aqui está outra variação que funciona bem para mim, ajuste rect.top + 40, rect.left + 0 para atender às suas necessidades:
fonte
Isso funciona para mim:
fonte
Primeiro, acho que deve haver um
afterShowing
método no objeto datepicker, onde você pode alterar a posição depois que o jquery tiver feito todo o seu vodu no_showDatepicker
método. Além disso, um parâmetro chamadopreferedPosition
também seria desejável, então você poderia defini-lo e jquery modificá-lo caso a caixa de diálogo seja renderizada fora da janela de exibição.Existe um "truque" para fazer essa última coisa. Se você estudar o
_showDatepicker
método, verá o uso de uma variável privada$.datepikcer._pos
. Essa variável será configurada se ninguém a tiver configurado antes. Se você modificar essa variável antes de mostrar a caixa de diálogo, o Jquery a pegará e tentará alocar a caixa de diálogo nessa posição, e se renderizar fora da tela, ele a ajustará para ter certeza de que está visível. Parece bom, hein?O problema é;
_pos
é privado, mas se você não se importa. Você pode:Mas tome cuidado com as atualizações do Jquery-ui, porque uma mudança na implementação interna do
_showDatepicker
pode corromper seu código.fonte
Eu precisava posicionar o selecionador de data de acordo com um div pai dentro do qual residia meu controle de entrada sem borda. Para fazer isso, usei o utilitário "position" incluído no núcleo da IU do jquery. Eu fiz isso no evento beforeShow. Como outros comentaram acima, você não pode definir a posição diretamente em beforeShow, pois o código datepicker irá redefinir o local após terminar a função beforeShow. Para contornar isso, basta definir a posição usando setInterval. O script atual será concluído, mostrando o selecionador de data e, em seguida, o código de reposicionamento será executado imediatamente após o selecionador de data estar visível. Embora isso nunca deva acontecer, se o selecionador de data não estiver visível após 0,5 segundos, o código tem um fail-safe para desistir e limpar o intervalo.
fonte
vincule o foco após usar o datepicker, altere o css do widget do datepicker para obter ajuda
fonte
eu consertei com meu código jquery personalizado.
dei ao meu campo de entrada datepicker uma classe " .datepicker2 "
encontre sua posição atual no topo e
posicionou a caixa pop-up, cujo nome de classe é " .ui-datepicker "
aqui está o meu código.
aqui "40" é meu pixel esperado, você pode mudar com o seu.
fonte
corrigir problema de posição de exibição daterangepicker.jQuery.js
fonte
Uma função jquery muito simples.
fonte
Passei uma quantidade absurda de tempo tentando descobrir esse problema em várias páginas de um novo site que estou desenvolvendo e nada parecia funcionar (incluindo qualquer uma das várias soluções apresentadas acima que implementei. Acho que o jQuery acabou de mudar as coisas já começaram a crescer o suficiente desde que foram sugeridas que as soluções não funcionam mais. Não sei. Honestamente, não entendo por que não há algo simples implementado na interface do usuário do jQuery para configurar isso, como parece ser um problema bastante grande com o calendário sempre aparecendo em alguma posição consideravelmente distante na página da entrada à qual está anexado.
De qualquer forma, eu queria uma solução final genérica o suficiente para que pudesse ser usada em qualquer lugar e funcionasse. Parece que finalmente cheguei a uma conclusão que evita algumas das respostas mais complicadas e específicas do código jQuery acima:
jsFiddle: http://jsfiddle.net/mu27tLen/
HTML:
JS:
Essencialmente, anexei uma nova tag de estilo ao cabeçalho antes de cada evento de "show" do selecionador de data (excluindo o anterior, se houver). Esse método de fazer as coisas contorna a grande maioria dos problemas que encontrei durante o desenvolvimento.
Testado no Chrome, Firefox, Safari e IE> 8 (como o IE8 não funciona bem com jsFiddle e estou perdendo o gosto por me preocupar com
Eu sei que isso é uma mistura de contextos jQuery e javascript, mas neste ponto eu simplesmente não quero me esforçar para convertê-lo para jQuery. Seria simples, eu sei. Eu cansei dessa coisa agora. Espero que outra pessoa possa se beneficiar com esta solução.
fonte
Eles mudaram o nome da classe para
ui-datepicker-trigger
Então, isso funciona em
jquery 1.11.x
fonte
Eu peguei (( Como controlar o posicionamento do jQueryUI datepicker ))
$ .extend ($. datepicker, {_checkOffset: function (inst, offset, isFixed) {return offset}});
funciona !!!
fonte
Ou você pode usar o evento de foco em seu objeto dateSelect e api de posição juntos. Você pode trocar superior e inferior e esquerda por direita ou centro (ou realmente qualquer coisa que você quiser da API de posição). Dessa forma, você não precisa de um intervalo ou de qualquer solução extremamente complexa e pode configurar o layout para atender às suas necessidades dependendo de onde a entrada está.
fonte
Também é importante notar que se o IE entrar no modo quirks, seus componentes de UI do jQuery e outros elementos serão posicionados incorretamente.
Para se certificar de que você não cairá no modo quirks, certifique-se de definir seu doctype corretamente para o HTML5 mais recente.
Usar o transicional confunde as coisas. Esperançosamente, isso economizará algum tempo no futuro.
fonte
Isso coloca a funcionalidade em um método denominado function, permitindo que seu código a encapsule ou que o método seja transformado em uma extensão jquery. Acabei de usar no meu código, funciona perfeitamente
fonte
No Jquery.UI, basta atualizar a função _checkOffset, de modo que viewHeight seja adicionado a offset.top, antes que o offset seja retornado.
fonte
fonte
fonte