Eu criei caixas de texto dinamicamente e quero que cada uma delas seja capaz de exibir um calendário com um clique. O código que estou usando é:
$(".datepicker_recurring_start" ).datepicker();
Que só funcionará na primeira caixa de texto, embora todas as minhas caixas de texto tenham uma classe chamada datepicker_recurring_start.
Sua ajuda é muito apreciada!
javascript
jquery
jquery-ui
datepicker
mergulhado
fonte
fonte
Respostas:
aqui está o truque:
DEMO
A
$('...selector..').on('..event..', '...another-selector...', ...callback...);
sintaxe significa:Adicionar um ouvinte ao
...selector..
(body
no nosso exemplo) para o evento..event..
('foco' no nosso exemplo). Para todos os descendentes dos nós correspondentes que correspondem ao seletor...another-selector...
(.datepicker_recurring_start
em nosso exemplo), aplique o manipulador de eventos...callback...
(a função inline em nosso exemplo)Veja http://api.jquery.com/on/ e especialmente a seção sobre "eventos delegados"
fonte
.datapicker()
toda vez que a caixa de texto ganha foco - então você deve ter cuidado com essa abordagem (presumindo que estou lendo isso direito). No entanto, acho que você aceitaria o.datapicker()
porque provavelmente verificará se um selecionador de data foi criado antes de tentar recriar. Com outro código, você pode não ter essa graça. Além disso, .on (só foi introduzido no JQuery 1.7 - certifique-se de usar a versão correta.:not(.hasDatepicker)
Para mim, abaixo jquery funcionou:
alterando "corpo" para documento
Graças a skafandri
Nota: certifique-se de que seu id é diferente para cada campo
fonte
Excelente resposta por skafandri +1
Isso foi atualizado apenas para verificar a classe hasDatepicker.
fonte
$('body').on('focus',".datepicker:not(.hasDatepicker)", function(){$(this).datepicker();});
?Certifique-se de que seu elemento com a
.date-picker
classe NÃO tenha umahasDatepicker
classe. Se isso acontecer, mesmo uma tentativa de reinicialização com$myDatepicker.datepicker();
falhará! Em vez disso, você precisa fazer ...fonte
Você precisa executar o
.datepicker();
novamente depois de criar dinamicamente os outros elementos da caixa de texto.Eu recomendaria fazer isso no método de retorno de chamada da chamada que está adicionando os elementos ao DOM.
Então, digamos que você esteja usando o método JQuery Load para extrair os elementos de uma fonte e carregá-los no DOM, você faria algo assim:
fonte
O novo método para elementos dinâmicos é MutationsObserver . O exemplo a seguir usa underscore.js para usar a função (_.each).
fonte
Isso foi o que funcionou para mim (usando jquery datepicker):
fonte
Nenhuma das outras soluções funcionou para mim. Em meu aplicativo, estou adicionando os elementos de intervalo de datas ao documento usando jquery e, em seguida, aplicando datepicker a eles. Portanto, nenhuma das soluções do evento funcionou por algum motivo.
Isso é o que finalmente funcionou:
Espero que isso ajude alguém, porque isso me atrapalhou um pouco.
fonte
você pode adicionar a classe .datepicker em uma função javascript, para poder alterar dinamicamente o tipo de entrada
fonte
Modifiquei a resposta @skafandri para evitar reaplicar o
datepicker
construtor a todas as entradas com.datepicker_recurring_start
classe.Aqui está o HTML:
Aqui está o JS:
aqui está uma demonstração de trabalho
fonte
Isso é o que funcionou para mim no JQuery 1.3 e está mostrando no primeiro clique / foco
isso precisa que sua entrada tenha a classe 'mostrar_calendario'
Live é para JQuery 1.3+. Para versões mais recentes, você precisa adaptá-lo para "on"
Veja mais sobre a diferença aqui http://api.jquery.com/live/
fonte
fonte