Estou usando o seletor de datas do jQuery para exibir o calendário em todo o meu aplicativo. Quero saber se posso usá-lo para exibir o mês e o ano (maio de 2010) e não o calendário?
374
Estou usando o seletor de datas do jQuery para exibir o calendário em todo o meu aplicativo. Quero saber se posso usá-lo para exibir o mês e o ano (maio de 2010) e não o calendário?
Respostas:
Aqui está um hack (atualizado com o arquivo .html inteiro):
EDITAR jsfiddle para o exemplo acima: http://jsfiddle.net/DBpJe/7755/
EDIT 2 Adiciona o valor do ano do mês à caixa de entrada apenas ao clicar no botão Concluído. Também permite excluir valores da caixa de entrada, o que não é possível no campo acima http://jsfiddle.net/DBpJe/5103/
O EDIT 3 atualizou o Better Solution com base na solução de rexwolf inativa.
http://jsfiddle.net/DBpJe/5106
fonte
$(this).val($.datepicker.formatDate('MM yy', new Date(year, month, 1)));
#ui-datepicker-div.noCalendar .ui-datepicker-calendar, #ui-datepicker-div.noCalendar .ui-datepicker-header a {display: none;} #ui-datepicker-div.noCalendar .ui-datepicker-header .ui-datepicker-title{width: 100%; margin: 0;}
E, em seguida, use o Javascript para manipular o comportamento:$("#ui-datepicker-div").addClass('noCalendar');
Este código está funcionando perfeitamente para mim:
A saída é:
fonte
@ Ben Koehler , isso é prefeito! Fiz uma pequena modificação para que o uso de uma única instância do seletor de datas mais de uma vez funcione como esperado. Sem essa modificação, a data é analisada incorretamente e a data selecionada anteriormente não é destacada.
fonte
As respostas acima são muito boas. Minha única reclamação é que você não pode limpar o valor depois de definido. Também prefiro a abordagem extend-jquery-like-a-plugin.
Isso funciona perfeito para mim:
Em seguida, invoque assim:
fonte
Isso resolverá o problema =) Mas eu queria o timeFormat aaaa-mm
Apenas tentei no FF4
fonte
Hoje eu tinha essa mesma necessidade e encontrei isso no github, trabalha com jQueryUI e possui selecionador de mês no lugar de dias no calendário
https://github.com/thebrowser/jquery.ui.monthpicker
fonte
Aqui está o que eu criei. Ele oculta o calendário sem precisar de um bloco de estilo extra e adiciona um botão Limpar para lidar com o problema de não conseguir limpar o valor depois que você clica na entrada. Também funciona bem com vários seletores de mês na mesma página.
HTML:
JavaScript:
fonte
Eu precisava de um selecionador de mês / ano para dois campos (De e até) e quando um era escolhido, o Max / Min era definido no outro ... a la picking datas das passagens aéreas. Eu estava tendo problemas para definir o máximo e o mínimo ... as datas do outro campo seriam apagadas. Graças a várias das postagens acima ... eu finalmente descobri. Você precisa definir opções e datas em uma ordem muito específica.
Veja este violino para a solução completa: Selecionador de mês / ano @ JSFiddle
Código:
Adicione isso também a um bloco de estilos, como mencionado acima:
fonte
Combinei muitas das boas respostas acima e cheguei a isso:
Está provado que funciona, mas enfrentando muitos erros, então fui forçado a corrigir em vários locais do datepicker:
patch1: em _showDatepicker: para suavizar a ocultação;
patch2: em _checkOffset: para corrigir o posicionamento do selecionador de mês (caso contrário, quando o campo estiver na parte inferior do navegador, a verificação de deslocamento estará desativada);
patch3: em onClose de _hideDatepicker: caso contrário, ao fechar os campos da data, piscará por um período muito curto, o que é muito irritante.
Eu sei que minha correção estava longe de ser boa, mas por enquanto está funcionando. Espero que ajude.
fonte
Adicione mais uma solução simples
http://jsfiddle.net/tmnasim/JLydp/
Recursos :
------------------------------------
outra solução que funcione bem para datepicker e monthpicker na mesma página: (também evite o erro de clicar várias vezes no botão anterior no IE, isso pode ocorrer se usarmos a função focus)
JS fiddle link
fonte
Sou eu ou isso não está funcionando como deveria no IE (8)? A data muda quando o clique é concluído, mas o datepicker se abre novamente, até você clicar em algum lugar da página para perder o foco no campo de entrada ...
Estou procurando resolver isso.
fonte
Se você estiver procurando por um selecionador de mês, tente este jquery.mtz.monthpicker
Isso funcionou bem para mim.
fonte
Como muitos outros, eu encontrei vários problemas ao tentar fazer isso, e apenas uma combinação das soluções postadas e, eventualmente, um grande truque para torná-lo perfeito, me trouxe uma solução.
Problemas com outras soluções neste segmento que eu tentei:
Finalmente encontrei uma maneira de corrigir todos esses problemas . Os quatro primeiros podem ser corrigidos simplesmente tomando cuidado com a forma como você faz referência aos seus selecionadores de data e mês no código interno e, é claro, fazendo algumas atualizações manuais dos seus selecionadores. Isso você pode ver nos exemplos de instanciação na parte inferior. O quinto problema pode ser ajudado adicionando algum código personalizado às funções do datepicker.
NOTA: NÃO é necessário usar os seguintes scripts do monthpicker para corrigir os três primeiros problemas no datepicker normal. Basta usar o script de instanciação datepicker na parte inferior desta postagem.
Agora, para usar os seletores de mês e corrigir o último problema, precisamos separar os seletores de data e os seletores de mês. Poderíamos ter um dos poucos complementos de mês do picador de jQuery-UI por aí, mas alguns não têm flexibilidade / capacidade de localização, outros não têm suporte para animação ... então, o que fazer? Role o seu "próprio" a partir do código datepicker! Com isso, você obtém um medidor de meses em pleno funcionamento, com todas as funcionalidades do medidor de data, apenas sem a exibição de dias.
Forneci um js-script do monthpicker e o script CSS que o acompanha , usando o método descrito abaixo, com o código jQuery-UI v1.11.1. Simplesmente copie esses trechos de código para dois novos arquivos, monthpicker.js e monthpicker.css, respectivamente.
Se você quiser ler sobre o processo bastante simples pelo qual converti o datepicker em um monthpicker, role para baixo até a última seção.
Agora, adicione os seletores de data e mês à página!
Os seguintes trechos de código javascript funcionam com vários seletores de datas e / ou seletores de mês na página, sem os problemas acima mencionados! Corrigido geralmente usando '$ (this).' muito :)
O primeiro script é para um seletor de datas normal e o segundo é para os "novos" seletores de mês.
O .after comentado , que permite criar algum elemento para limpar o campo de entrada, é roubado da resposta de Paul Richards.
Estou usando o formato "MM yy" no meu monthpicker e o formato 'aa-mm-dd' no meu datepicker, mas isso é totalmente compatível com todos os formatos , portanto, você pode usar o que quiser. Simplesmente altere a opção 'dateFormat'. As opções padrão 'showButtonPanel', 'showAnim' e 'yearRange' são obviamente opcionais e personalizáveis para seus desejos.
Adicionando um datepicker
Instanciação do datepicker. Este vai de 90 anos atrás e até os dias atuais. Ele ajuda a manter o campo de entrada correto, especialmente se você definir as opções defaultDate, minDate e maxDate, mas poderá lidar com isso se não o fizer. Ele funcionará com qualquer dateFormat que você escolher.
Adicionando um monthpicker
Inclua o arquivo monthpicker.js e o arquivo monthpicker.css na página que você deseja usar.
Instanciação do monthpicker O valor recuperado deste monthpicker, é sempre o PRIMEIRO dia do mês selecionado. Começa no mês atual e varia de 100 anos atrás e 10 anos no futuro.
É isso aí! É tudo o que você precisa para fazer uma escolha mensal.
Parece que não consigo fazer com que o jsfiddle funcione com isso, mas está funcionando para mim no meu projeto asp.net MVC. Faça o que você normalmente faz para adicionar um datepicker à sua página e incorpore os scripts acima, possivelmente alterando o seletor (que significa $ ("# MyMonthTextBox")) para algo que funcione para você.
Espero que isso ajude alguém.
Links para pastebins para algumas configurações extras de data e mês:
Monthpicker trabalhando no último dia do mês . A data que você obtém deste mês é sempre o último dia do mês.
Dois coletores mensais colaboradores ; 'start' está funcionando no primeiro dia do mês e 'end' está funcionando no último dia do mês. Ambos são restritos um pelo outro, portanto, a escolha de um mês no 'final' anterior ao mês selecionado no 'início' mudará 'início' para o mesmo mês que 'final'. E vice versa. OPCIONAL: Ao selecionar um mês em 'start', a 'minDate' em 'end' é definida para esse mês. Para remover esse recurso, comente uma linha em onClose (leia os comentários).
Dois coletores de datas colaboradores ; Ambos são restritos um pelo outro, portanto, escolher uma data no 'final' anterior à data selecionada no 'início' mudará 'início' para o mesmo mês que 'final'. E vice versa. OPCIONAL: Ao selecionar uma data em 'início', o 'minDate' em 'final' é definido para essa data. Para remover esse recurso, comente uma linha em onClose (leia os comentários).
Como mudei o DatePicker para um MonthPicker
Peguei todo o código javascript do jquery-ui-1.11.1.js referente ao datepicker, colei-o em um novo arquivo js e substitui as seguintes strings:
Em seguida, removi a parte do loop for, que cria toda a div ui-datepicker-calendar (a div que outras soluções ocultam usando CSS). Isso pode ser encontrado na função _generateHTML: (inst).
Encontre a linha que diz:
Marque tudo, desde o div-tag de fechamento e até (e não incluindo) a linha onde está escrito:
Agora vai ser infeliz porque precisamos fechar algumas coisas. Após o fechamento da tag div de antes, adicione este:
O código agora deve ser bem costurado. Aqui está um trecho de código mostrando o que você deveria ter acabado:
Em seguida, copiei / colei o código do jquery-ui.css pertencente aos datepickers para um novo arquivo CSS e substitui as seguintes strings:
fonte
depois de procurar no jQueryUI.com o datepicker, eis a minha conclusão e a resposta à sua pergunta.
Primeiro, eu diria não à sua pergunta. Você não pode usar o dateQuicker do jQueryUI para escolher apenas o mês e o ano. Não é suportado. Não possui função de retorno de chamada para isso.
Mas você pode cortá-lo para exibir apenas mês e ano usando css para ocultar os dias etc. E acho que ainda não fará sentido, pois você precisa clicar nas datas para escolher uma data.
Posso dizer que você só precisa usar outro seletor de datas. Como o que Roger sugeriu.
fonte
Eu tive o problema de selecionador de data misturado com selecionador de mês. Eu resolvi assim.
fonte
Se alguém quiser isso também para vários calendários, não é muito difícil adicionar essa funcionalidade ao jquery ui. com pesquisa minificada por:
adicione isso na frente de x
procurar por
e substitua-o por
também procure
substitua-o por
para css, você deve usar:
Depois que tudo estiver pronto, basta acessar as funções init do datepicker e fornecer a configuração var
justMonth: true
é a chave aqui :)fonte
Sobre: http://www.mattkruse.com/javascript/calendarpopup/
Selecione o exemplo de seleção do mês
fonte
Fiz alguns refinamentos na resposta quase perfeita do BrianS acima:
Regexei o valor definido no programa porque acho que, na verdade, o torna um pouco mais legível nesse caso (embora note que estou usando um formato um pouco diferente)
Meu cliente não queria calendário, então adicionei uma adição de classe em mostrar / ocultar para fazer isso sem afetar nenhum outro selecionador de datas. A remoção da classe está em um cronômetro para evitar que a tabela volte a piscar à medida que o contador de datas desaparece, o que parece ser muito perceptível no IE.
EDIT: Um problema que ainda não foi resolvido é que não há como esvaziar o selecionador de datas - limpe o campo e clique fora e ele repovoa com a data selecionada.
EDIT2: Eu não consegui resolver isso muito bem (ou seja, sem adicionar um botão Limpar separado ao lado da entrada), então acabei usando isso: https://github.com/thebrowser/jquery.ui.monthpicker - se alguém puder obtenha a interface do usuário padrão que seria incrível.
Você também precisa desta regra de estilo:
fonte
Gostei da resposta @ user1857829 e de sua abordagem "estender-jquery como um plug-in". Acabei de fazer uma pequena modificação para que, quando você mude de mês ou ano, o selecionador realmente anote a data no campo. Descobri que gostaria desse comportamento depois de usá-lo um pouco.
fonte
Eu tive algumas dificuldades com a resposta aceita e ninguém mais poderia ser usado com um esforço mínimo como base. Então, decidi ajustar a versão mais recente da resposta aceita até que ela satisfaz pelo menos os padrões mínimos de codificação / reutilização de JS.
Aqui está uma solução muito mais limpa que a 3ª (mais recente) edição da resposta aceita por Ben Koehler . Além disso, irá:
mm/yy
formato, mas com qualquer outro, incluindo os OPsMM yy
.datestr
,month
,year
etc variáveis.Confira:
E tudo o mais que você precisa é o seguinte CSS em algum lugar:
É isso aí. Espero que o exposto economize algum tempo para outros leitores.
fonte
Sei que é uma resposta um pouco tardia, mas tive o mesmo problema alguns dias antes e vim com uma solução agradável e suave. Primeiro eu encontrei esse ótimo selecionador de datas aqui
Acabei de atualizar a classe CSS (jquery.calendarPicker.css) que vem com o exemplo desta forma:
O plug-in dispara um evento DateChanged quando você altera alguma coisa, por isso não importa que você não esteja clicando em um dia (e se encaixa como um selecionador de ano e mês)
Espero que ajude!
fonte
Eu também precisava de um selecionador de meses. Eu fiz um simples com o ano no cabeçalho e 3 linhas de 4 meses abaixo. Confira: Selecionador simples de um mês com jQuery .
fonte
Tentei as várias soluções fornecidas aqui e elas funcionaram bem se você simplesmente quisesse algumas suspensões.
O melhor (na aparência, etc.) 'selecionador' ( https://github.com/thebrowser/jquery.ui.monthpicker ) sugerido aqui é basicamente uma cópia de uma versão antiga do jquery-ui datepicker com o _generateHTML reescrito. No entanto, achei que ele não funciona mais bem com o jquery-ui atual (1.10.2) e tinha outros problemas (não fecha em esc, não fecha em outra abertura de widget, tem estilos codificados).
Em vez de tentar corrigir o seletor de mês e tentar novamente o mesmo processo com o seletor de datas mais recente, fui conectando-me às partes relevantes do seletor de datas existente.
Isso envolve a substituição:
Como essa pergunta é um pouco antiga e já está bem respondida, aqui está apenas a substituição _selectDay para mostrar como isso foi feito:
Como afirmado, esta é uma pergunta antiga, mas achei útil, pois queria adicionar feedback com uma solução alterante.
fonte
para um monthpicker, usando JQuery v 1.7.2, eu tenho o seguinte javascript que está fazendo exatamente isso
$l("[id$=txtDtPicker]").monthpicker({
showOn: "both",
buttonImage: "../../images/Calendar.png",
buttonImageOnly: true,
pattern: 'yyyymm', // Default is 'mm/yyyy' and separator char is not mandatory
monthNames: ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez']
});
fonte
Obrigado pela solução de Ben Koehler.
No entanto, tive um problema com várias instâncias de selecionadores de datas, com algumas delas necessárias na seleção do dia. A solução de Ben Koehler (na edição 3) funciona, mas oculta a seleção do dia em todas as instâncias. Aqui está uma atualização que resolve esse problema:
fonte
Use a
onSelect
chamada de volta e remova a parte do ano manualmente e defina o texto no campo manualmentefonte