2012-07-02 19 views
15

Estoy usando el selector de fechas de jQuery UI para las selecciones de fecha en mi sitio. Uno de mis usuarios acaba de actualizarse a la versión más nueva de Chrome, que tiene un selector nativo de fechas para HTML5. El gran problema es que las dos IU se superponen entre sí. El otro problema es cuando el usuario envía una fecha, la fecha en la base de datos vuelve a "0000-00-00" y está produciendo datos incorrectos.Tipo de entrada de fecha HTML5 Interferir con jQuery Datepicker

Si elimino el jQuery datepicker, la mayoría de los usuarios que no usan los últimos navegadores no tendrán un selector de fecha emergente. Y aquellos que tengan el navegador más nuevo tendrán dos calendarios superpuestos que romperán la aplicación. Mi pregunta es ¿cómo desactivo los navegadores más nuevos para que no muestren la función de fecha incorporada y continúen usando el jQuery Datepicker?

Respuesta

38

Use Modernizr o una biblioteca similar para detectar características si el navegador admite el input type=date, y luego cargue el jQuery UI datepicker si no lo hace.

if (!Modernizr.inputtypes.date) { 
    $('input[type=date]').datepicker(); 
} 
+0

¿dónde colocas el código de arriba? Además, ¿llamo al script modernizr.js en mi encabezado? – Neon

+1

Sí, necesita hacer referencia al moderizr.js en su encabezado con una etiqueta de script. Y colocaría el código anterior donde sea que esté llamando al método '. Datepicker()'. Publicar su código actual ayudaría. – jmoerdyk

+0

¡Esta solución funcionó para mí! Aquí hay instrucciones para instalar Modernizr: http://modernizr.com/docs/#installing – Luke

0

A veces no puede modificar los tipos de formulario. Por ejemplo, estoy usando FormType de Symfony2 Bundle.

Tuve este problema usando Genemu jQuery Datepicker, y resolví este problema añadiendo un botón de imagen de calendario y un poco de código CSS.

You can see final result in this link

Aquí puede leer la documentación para añadir icono de la imagen: jQuery UI Datepicker

Entonces, sencilla añadió un css como esto (tal vez las reglas de estilo serán diferentes para usted):

form input[type=date] + img { 
    position: relative; 
    left: -25px; 
} 
0

Agregue el atributo novalidate a su formulario para eliminar la validación de compilación del navegador.

<form action="login.htm" novalidate> 

Consulte este link para obtener más información.

Cuestiones relacionadas