Estoy haciendo una aplicación phonegap. Cuando intento type="date"
el campo de entrada como se muestra a continuación, muestra el selector de fecha en el iPhone como esperaba, pero no muestra el marcador de posición que le he dado. Encontré el mismo problema aquí en SO, pero no hay solución en ningún lado.
<input placeholder="Date" class="textbox-n" type="date" id="date">
html
cordova
datepicker
placeholder
Mumthezir VP
fuente
fuente
Respuestas:
Puede que no sea apropiado ... pero me ayudó.
fuente
Si usa el método de mvp pero agrega el evento onblur para volver a cambiarlo a un campo de texto, de modo que el texto del marcador de posición aparezca nuevamente cuando el campo de entrada pierda el foco. Simplemente hace que el truco sea un poco más agradable.
Espero que esto ayude.
fuente
Terminé usando lo siguiente.
Con respecto a los comentarios de Firefox : generalmente, Firefox no mostrará ningún marcador de posición de texto para la fecha del tipo de entrada. Pero como esta es una pregunta de Cordova / PhoneGap, esto no debería ser motivo de preocupación (a menos que desee desarrollar contra FirefoxOS).
fuente
<input type="date" placeholder="MY PLACEHOLDER" onchange="this.classList.toggle('has-value',this.value);">
input[type="date"]:not(:focus):not(.has-value):before
para mostrar el formato mientras la entrada está enfocada (para las personas queUsé esto en mi css:
y poner algo como esto en javascript:
Me funciona para dispositivos móviles (Ios8 y Android). Pero usé jquery inputmask para escritorio con tipo de texto de entrada. Esta solución es una buena forma si su código se ejecuta en ie8.
fuente
color: #aaa
para una apariencia similar a un marcador de posición en iOS.color: lightgray
es demasiado ligero.$("#myel").on( "input" , function(){ $(this).toggleClass( "full" , $(this).val().length > 0 ); });
A partir de hoy (2016), he usado con éxito esos 2 fragmentos (además, funcionan muy bien con Bootstrap4).
Ingrese datos a la izquierda, marcador de posición a la izquierda
El marcador de posición desaparece al hacer clic
fuente
Según el estándar HTML :
fuente
Esto funciona para mi:
fuente
:after
pseudo elemento desaparezca cuando se seleccione una fecha. Así que no es necesario eliminar el marcador de posiciónonfocus="(this.placeholder='')"
para eliminar el marcador de posición una vez que se seleccione la fecha.Usé esto con jQuery: http://jsfiddle.net/daviderussoabram/65w1qhLz/
fuente
Según las respuestas de deadproxor y Alessio, intentaría usar solo CSS:
Y si necesita hacer que el marcador de posición sea invisible después de escribir algo en la entrada, podríamos intentar usar los selectores: válido y: inválido, si su entrada es obligatoria.
EDITAR
Aquí el código si está utilizando required en su entrada:
fuente
Encontré una mejor manera de resolver su problema. Creo que esto te ayudará. cuando está enfocado, el cuadro cambiará el tipo en texto para que muestre su marcador de posición. cuando se enfoca en, su tipo cambia a fecha, por lo que se mostrará la vista de calendario.
fuente
Tomé la idea de jbarlow, pero agregué un if en la función onblur para que los campos solo cambien su tipo si el valor está vacío
fuente
Al abordar el problema en la respuesta correcta actual "al hacer clic en el campo se muestra el teclado en pantalla en lugar del selector de fechas":
El problema se debe a que el navegador se comporta de acuerdo con el tipo de entrada al hacer clic en (= texto). Por lo tanto, es necesario dejar de enfocarse en el elemento de entrada (desenfoque) y luego reiniciar el enfoque programáticamente en el elemento de entrada que JS definió como tipo = fecha en el primer paso. El teclado se muestra en modo de número de teléfono.
fuente
prueba mi solución. Utilizo el atributo 'requerido' para saber si la entrada está llena y, si no, muestro el texto del atributo 'marcador de posición'
fuente
Me tomó un tiempo descifrar este, dejarlo como
type="text"
y agregaronfocus="(this.type='date')"
, tal como se muestra arriba.Incluso me gusta la idea de onBlur mencionada anteriormente
<input placeholder="Date" class="textbox-n" type="text" onfocus="(this.type='date')" onblur="(this.type='text')" id="date">
Espero que esto ayude a cualquiera que no haya entendido bien lo que está sucediendo arriba
fuente
Para resumir el problema de las entradas de fecha:
La solución que encontré para cumplir con esos requisitos es usar el truco habitual para diseñar elementos de formularios nativos: asegúrese de que el elemento se muestre pero no esté visible, y muestre su estilo esperado a través de su etiqueta asociada . Normalmente, la etiqueta se mostrará como la entrada (incluido un marcador de posición), pero sobre ella.
Entonces, un HTML como:
Podría tener el estilo:
Cualquier evento (clic, foco) en dicha etiqueta asociada se reflejará en el campo mismo y, por lo tanto, activará la interfaz de usuario de entrada de fecha.
Si desea probar una solución de este tipo en vivo, puede ejecutar esta versión Angular desde su tableta o dispositivo móvil.
fuente
Entonces, lo que he decidido hacer finalmente está aquí y funciona bien en todos los navegadores móviles, incluidos iPhones y Androids.
Fecha
fuente
Estoy trabajando con ionicframework y la solución proporcionada por @Mumthezir es casi perfecta. En caso de que alguien tuviera el mismo problema que yo (después del cambio, la entrada todavía está enfocada y cuando se desplaza, el valor simplemente desaparece) Así que agregué onchange para hacer input.blur ()
fuente
Usted puede
Me gusta esto...
fuente
Encontré una mejor manera de manejar la comprensión básica del usuario con el mouse sobre y abriendo el selector de fecha al hacer clic:
<input type="text" onfocus="(this.type='date')" onmouseover="(this.type = 'date')" onblur="(this.value ? this.type = 'date' : this.type = 'text')" id="date_start" placeholder="Date">
También oculte la flecha del webkit y hágalo 100% ancho para cubrir el clic:
fuente
Desde el punto de vista angular, logré poner un marcador de posición en el elemento de fecha de tipo de entrada.
En primer lugar, definí el siguiente CSS:
La razón por la que esto es necesario es que si el contenido de css3 tiene un color diferente al del marcador de posición normal, tuve que usar uno común.
Luego, en la plantilla se utilizó un atributo viewchild birthDate, para poder acceder a esta entrada desde el componente. Y definimos una expresión angular en el atributo del marcador de posición, que decidirá si mostramos el marcador de posición o no. Este es el mayor inconveniente de la solución, es que debe administrar la visibilidad del marcador de posición.
fuente
Código revisado de mumthezir
fuente
Me sorprende que solo haya una respuesta con un enfoque similar al que usé.
Me inspiré en el comentario de @ Dtipson sobre la respuesta de @Mumthezir VP.
Utilizo dos entradas para esto, una es una entrada falsa con la
type="text"
que configuro el marcador de posición, la otra es el campo real contype="date"
.En el
mouseenter
evento en su contenedor, oculto la entrada falsa y muestro la real, y hago lo contrario en elmouseleave
evento. Obviamente, dejo visible la entrada real si tiene un valor establecido.Escribí el código para usar Javascript puro, pero si usa jQuery (yo lo hago), es muy fácil "convertirlo".
Probé esto también en un teléfono Android y funciona, cuando el usuario toca el campo, se muestra el selector de fecha. Lo único es que, si la entrada real no tenía valor y el usuario cierra el selector de fechas sin elegir una fecha, la entrada permanecerá visible hasta que toque fuera de ella. No hay ningún evento que escuchar para saber cuándo se cierra el selector de fechas, así que no sé cómo resolver eso.
No tengo un dispositivo iOS para probarlo.
fuente
Ampliando la solución de @ mvp con un javascript discreto en mente, este es el enfoque:
HTML:
Javascript:
fuente
Creo que todo lo que tienes que hacer es cambiar el modelo para decir que el campo de fecha es anulable y luego poner [Obligatorio] en él si es necesario. Si hace esto, aparece el texto del marcador de posición.
fuente
Oye, me encontré con el mismo problema anoche y descubrí que una combinación de todas tus respuestas y algo de magia brillante está haciendo un buen trabajo:
El HTML:
El CSS:
El jQuery:
Explicación: Entonces, lo que está sucediendo aquí, en primer lugar en el HTML , esto es bastante sencillo simplemente haciendo una entrada de fecha HMTL5 básica y estableciendo un marcador de posición. Siguiente parada: CSS , estamos configurando un: before-pseudo-element para falsificar nuestro marcador de posición, solo toma el atributo del marcador de posición de la entrada misma. Hice esto solo disponible desde un ancho de ventana de 1024px, por qué lo diré más tarde. Y ahora jQuery , después de refactorizar un par de veces, se me ocurrió este fragmento de código que verificará cada cambio si hay un valor establecido o no, si no es así, (re) agregará la clase, viceversa .
CONOZCA PROBLEMAS:
¡Espero que ayude! cheerio!
fuente
Si solo le preocupa el móvil:
fuente
HTML:
JavaScript:
fuente
Aquí hay otro posible truco que no usa js y sigue usando css
content
. Tenga en cuenta que como:after
no es compatible con algunos navegadores para las entradas, debemos seleccionar la entrada de otra manera, lo mismo paracontent attr('')
fuente
Esto funciona para mí usando esto como elemento de entrada:
Este CSS muestra un marcador de posición permanente. El valor seleccionado se muestra después del marcador de posición.
Utilizo esta solución para un formulario de Wordpress con el complemento contact-form-7.
fuente
Ninguna de las soluciones me funcionaba correctamente en Chrome en iOS 12 y la mayoría de ellas no están diseñadas para hacer frente a posibles entradas de fecha múltiples en una página. Hice lo siguiente, que básicamente crea una etiqueta falsa sobre la entrada de fecha y la elimina al tocarla. También eliminaré la etiqueta falsa si el ancho de la ventana gráfica supera los 992 px.
JS:
CSS:
fuente