2010-12-03 21 views
7

Me pregunto si alguien puede sugerir un complemento o solución que me permita usar el complemento jQuery datepicker con múltiples formatos de fecha de entrada al mismo tiempo. Esto permitiría al usuario ingresar la fecha en cualquiera de los formatos especificados. Es decir .:jQuery Datepicker que admite múltiples formatos

3 31 10 
3/31/2010 
3-31-10 

No me importa si el valor se ha mezclado a uno de los formatos específicos después de que las lengüetas de usuario fuera. Un buen complemento de enmascaramiento de entrada también podría funcionar para mi propósito, sin embargo, this popular one parece esperar una cardinalidad fija para cada uno de los campos, lo cual no funcionará porque quiero que el usuario pueda ingresar 3 o 03 para el mes de marzo. , por ejemplo.

+1

¿Por qué el jQueryUI Datepicker dateFormat no funciona para usted? http://jqueryui.com/demos/datepicker/#date-formats –

+0

Quiero que el usuario pueda ingresar la fecha en una variedad de formatos, realmente no me importa cuál y no los quiero tiene que especificar de antemano. dateFormat solo acepta un formato. –

Respuesta

1

Puede intentar interpretar varios formatos de entrada y reemplazar los caracteres en la blur evento:

$("#datepicker").datepicker({ 
    constrainInput: false 
}).blur(function() { 
    var txt = $(this).val(); 
    $(this).val(txt.replace(/-| /g, '/')); 
}); 

Por desgracia, si no puedo encontrar una manera de hacer lo mismo si el Enter la tecla está presionada

17

Ha sido un tiempo desde que esta pregunta estaba activo, pero si alguien está interesado en resolver el problema con la simple selector de fechas jQueryUI, que se puede lograr mediante la deformación de su método parseDate:

$.datepicker.inputFormats = ["dd-mm-yy", "dd/mm/yy", "dd mm yy"];//list formats to be accepted here 

$.datepicker.originalParseDate = $.datepicker.parseDate; 

$.datepicker.parseDate = function (format, value, settings) { 
    var date; 

    function testParse(format, value, settings) { 
     if (! date) { 
      try { 
       date = $.datepicker.originalParseDate(format, value, settings); 
      } catch (Error) { 
      } 
     } 
    } 

    testParse(format, value, settings); 
    for(var n = 0, stop = $.datepicker.inputFormats ? $.datepicker.inputFormats.length : 0; n < stop; n++){ 
     testParse($.datepicker.inputFormats[n], value, settings); 
    }; 
    return date; 
}; 
+0

¿La línea 'testParse (formato, valor, configuración);' significa que el original dateFormat se prueba primero y luego todos los 'inputFormats'? Si es así, 'inputFormats' se debe llamar' additionalFormats'? – mnsc

+0

¡Acabas de alegrarme el día! ¡Gracias! – Nicknameless

+0

también puede agregar el uso. ¿Y debería agregar su código dentro del archivo jquery ui y modificarlo? gracias – Alex

0

jaula cascabel respondió que puede anular la función jquery datepicker parseDate para admitir múltiples formatos. (No puedo comentar debido a la reputación, pero necesito agregar esta información independientemente)

Encontré que también necesita reemplazar las funciones formatDate y _possibleChars si está configurando la variable de formato dentro del datepicker para que sea la lista de formatos. Datepicker no espera una lista (en mi caso JSON) y tienes que solucionar esto.

Ten en cuenta también que si no se sobreescribe estos dos, que no se comportan como se esperaba. P.ej. no podrá escribir los caracteres que están en su lista de formatos personalizados (excepto para el primer formato que se almacena en el mismo datepicker).