Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Crear datepicker dinamicamente con javascript

Estas en el tema de Crear datepicker dinamicamente con javascript en el foro de Frameworks JS en Foros del Web. Buenas noches, estoy usando el datepicker de jquery en mi proyecto, con el siguiente código <script> $(document).ready(function(){ $(".campofecha").datepicker({ showOn: 'both', buttonImage: 'datepicker/calendar.gif', buttonImageOnly: true, changeYear: ...
  #1 (permalink)  
Antiguo 09/02/2012, 20:04
 
Fecha de Ingreso: enero-2010
Mensajes: 247
Antigüedad: 14 años, 2 meses
Puntos: 2
Crear datepicker dinamicamente con javascript

Buenas noches, estoy usando el datepicker de jquery en mi proyecto, con el siguiente código


<script>
$(document).ready(function(){

$(".campofecha").datepicker({
showOn: 'both',
buttonImage: 'datepicker/calendar.gif',
buttonImageOnly: true,
changeYear: true,
numberOfMonths: 1,
changeMonth: true,
yearRange: '-90 :+100'
});
</script>

y tengo un boton en el HTML
de la siguiente manera

<input type="button" id="bgenerar" name="bgenerar" value="Genera" onclick="generafecha();" />


generafecha es un funcion en un documento javascript la cual genera atomaticamente varios camposfecha cuya clase es "campofecha" es decir un datepicker, pero al generarlos crea solo los imputs pero no las propiedades del datepicker, se que es porque generando los camposfecha despues de haberse cargado la pagina, como puedo hacer para evitar esto.

la funcion generafecha() es la siguiente me disculpan si la sintaxis no es la correcta debido a que estoy digitando todo aqui

document.getElementById('div-dondegenero').innerHTML +='<br/><input type="text" name="fecha" class="campofecha" readonly="readonly" />';
  #2 (permalink)  
Antiguo 09/02/2012, 21:21
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 1 mes
Puntos: 192
Respuesta: Crear datepicker dinamicamente con javascript

Podrías usar .delegate(). Así:
http://jsbin.com/emamiz (ir a "Edit in jsbin.com" para ver el código fuente)


Código Javascript:
Ver original
  1. $(function(){
  2.       $('.form-con-fechas').delegate('.campofecha','focusin',function(){
  3.         $(this).datepicker();
  4.       });
  5.      
  6.      
  7.       $('.agregar-campo').click(function(){
  8.         $('.campofecha').last().after('<input class="campofecha" type="text" />');
  9.       });
  10.     });
__________________
nahueljose.com.ar
  #3 (permalink)  
Antiguo 10/02/2012, 08:15
 
Fecha de Ingreso: enero-2010
Mensajes: 247
Antigüedad: 14 años, 2 meses
Puntos: 2
Respuesta: Crear datepicker dinamicamente con javascript

Gracias Naahuel, pero en javascript antes de general dinamicamente la fecha, hago varias validaciones y calculos para despues crearlos, las veo dificil hacerlas desde jquery, alguna otra manera ?
  #4 (permalink)  
Antiguo 10/02/2012, 08:19
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 1 mes
Puntos: 192
Respuesta: Crear datepicker dinamicamente con javascript

No entiendo el problema.

El generado de los campos hacelos como quieras, lo que interesa ahí es la forma de delegar el datepicker() de forma de que funcione aún cuando insertás un campo dinámicamente:

Código Javascript:
Ver original
  1. $('form').delegate('.campofecha','focusin',function(){
  2.         $(this).datepicker();
  3.       });
__________________
nahueljose.com.ar
  #5 (permalink)  
Antiguo 10/02/2012, 11:57
 
Fecha de Ingreso: enero-2010
Mensajes: 247
Antigüedad: 14 años, 2 meses
Puntos: 2
Respuesta: Crear datepicker dinamicamente con javascript

buenas tardes haciendo caso a su experiencia he modificado el codigo de la siguiente manera.

<script>
$(document).ready(function(){

$(".campofecha").datepicker({
showOn: 'both',
buttonImage: 'datepicker/calendar.gif',
buttonImageOnly: true,
changeYear: true,
numberOfMonths: 1,
changeMonth: true,
yearRange: '-90 :+100'
});

$('.form-gerados').delegate('.campofecha','focusin',functio n(){
$(this).datepicker();
});

</script>


<input type="button" id="bgenerar" name="bgenerar" value="Genera" onclick="generafecha();" />


function generafecha(){
document.getElementById('div-dondegenero').innerHTML +='<br/><input type="text" name="fecha" class="campofecha" readonly="readonly" />';
}



no me esta funcionando, que tendre mal o como puedo hacerlo funcionar. gracias.
  #6 (permalink)  
Antiguo 10/02/2012, 12:28
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 1 mes
Puntos: 192
Respuesta: Crear datepicker dinamicamente con javascript

¿Por qué estás asignando el datepicker dos veces?

Tu script tiene muchos problemas. Para empezar, problemas de sintaxis con paréntesis desbalanceados.

Esta función es problemática:
Código Javascript:
Ver original
  1. function generafecha(){
  2. document.getElementById('div-dondegenero').innerHTML +='<br/><input type="text" name="fecha" class="campofecha" readonly="readonly" />';
  3. }

Esto borra los inputs y genera nuevos. Si ya completaste alguno antes, se te borra. Mirá acá: http://jsbin.com/ipuxuf (generá uno, llenalo con una fecha y generá otro, vas a ver que se borra lo que llenaste).

Algo así sería mejor, dado que ya estás usando jQuery:

Código Javascript:
Ver original
  1. function generafecha(){
  2.   $('#div-dondegenero').append('<br /><input type="text" name="fecha" class="campofecha" readonly="readonly" />');
  3. }

Eso agrega html sin borrar lo que ya hay. Probalo acá: http://jsbin.com/ipuxuf/2/
__________________
nahueljose.com.ar
  #7 (permalink)  
Antiguo 10/02/2012, 16:25
 
Fecha de Ingreso: enero-2010
Mensajes: 247
Antigüedad: 14 años, 2 meses
Puntos: 2
Respuesta: Crear datepicker dinamicamente con javascript

que pena Naahuel, al parecer eres una persona muy sabia, los errores de sitaxis en el documento html original no exiten si no no estuviera funcionando, perdona la forma como lo transcribí faltaron unos paréntesis ahora me di cuenta, pero en definitiva.
la function


function generafecha(){
$('#div-dondegenero').append('<br /><input type="text" name="fecha" class="campofecha" readonly="readonly" />');
}

la tengo en un documento aparte no el mismo html, no hay problema con esto ?

Cita:
<script>
$(document).ready(function(){

$(".campofecha").datepicker({
showOn: 'both',
buttonImage: 'datepicker/calendar.gif',
buttonImageOnly: true,
changeYear: true,
numberOfMonths: 1,
changeMonth: true,
yearRange: '-90 :+100'
});

$('.form-gerados').delegate('.campofecha','focusin',functio n(){
$(this).datepicker();
});

});
</script>
Esta parte esta bien ? donde hago la doble asignacion del datepicker ?

si desea puedo enviarle los archivos con lo que pretendo desarrollar.
  #8 (permalink)  
Antiguo 10/02/2012, 16:40
 
Fecha de Ingreso: enero-2010
Mensajes: 247
Antigüedad: 14 años, 2 meses
Puntos: 2
Respuesta: Crear datepicker dinamicamente con javascript

Gracias de nuevo, ya lo he solucionado el problema ahora es que cuando genera el datepicker no me nuestra el icono de la fecha si no hasta cuando le doy clic sobre el input, como podre solucionar esto ?
  #9 (permalink)  
Antiguo 10/02/2012, 18:49
Avatar de Naahuel  
Fecha de Ingreso: marzo-2011
Ubicación: localhost
Mensajes: 796
Antigüedad: 13 años, 1 mes
Puntos: 192
Respuesta: Crear datepicker dinamicamente con javascript

Cita:
Iniciado por JAI_ME Ver Mensaje
Gracias de nuevo, ya lo he solucionado el problema ahora es que cuando genera el datepicker no me nuestra el icono de la fecha si no hasta cuando le doy clic sobre el input, como podre solucionar esto ?
Me imaginé que eso sería un problema cuando lo vi en funcionamiento, sip. Probemos otra aproximación, olvidémonos de .delegate():

Código Javascript:
Ver original
  1. $(function(){
  2.     // cuando el DOM cargue, asignarle el datepicker a los campos de fecha
  3.     asignarDatepicker($('.campofecha'));
  4.   });
  5.  
  6.   //funciones
  7.  function asignarDatepicker(elem){
  8.      elem.datepicker({
  9.               showOn: 'both',
  10.               buttonImage: 'datepicker/calendar.gif',
  11.               buttonImageOnly: true,
  12.               changeYear: true,
  13.               numberOfMonths: 1,
  14.               changeMonth: true,
  15.               yearRange: '-90 :+100'
  16.       });
  17.   }
  18.  
  19. function generafecha(){
  20.   var nuevoInput = $('<input type="text" name="fecha" class="campofecha" readonly="readonly" /><br />'); //crear objeto jquery con el campo
  21.    $('#div-dondegenero').append(nuevoInput);
  22.   nuevoInput =  $('#div-dondegenero').find('input').last();
  23.   asignarDatepicker(nuevoInput);
  24. }

De esa forma sólo asignamos una sóla vez el datepicker y es un tantito más fácil de rastrear. Ese script no es muy óptimo realmente, pero funciona. La función que genera los inputs además de generarlos les asigna el datepicker. Acá está en funcionamiento http://jsbin.com/ipuxuf/4 y si carga la imagen apenas generas otro.

Espero esta solución sea un poco mejor :)
__________________
nahueljose.com.ar

Etiquetas: datepicker, dinamicamente, funcion, html, input, javascript, botones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:28.