Je fais une application phonegap. Lorsque j'essaie type="date"
le champ de saisie comme indiqué ci-dessous, il affiche le sélecteur de date sur l'iPhone comme je m'y attendais, mais il ne montre pas l'espace réservé que j'ai donné. J'ai trouvé le même problème ici dans SO, mais aucune solution nulle part.
<input placeholder="Date" class="textbox-n" type="date" id="date">
html
cordova
datepicker
placeholder
Mumthezir VP
la source
la source
Réponses:
Ce n'est peut-être pas approprié ... mais cela m'a aidé.
la source
Si vous utilisez la méthode de mvp mais que vous ajoutez l'événement onblur pour le remplacer par un champ de texte afin que le texte de l'espace réservé réapparaisse lorsque le champ de saisie perd le focus. Cela rend juste le hack un peu plus agréable.
J'espère que cela t'aides.
la source
J'ai fini par utiliser ce qui suit.
Concernant le (s) commentaire (s) de Firefox: En général, Firefox n'affichera aucun espace réservé de texte pour les entrées de type date. Mais comme il s'agit d'une question sur Cordova / PhoneGap, cela ne devrait pas vous inquiéter (à moins que vous ne souhaitiez développer contre FirefoxOS).
la source
<input type="date" placeholder="MY PLACEHOLDER" onchange="this.classList.toggle('has-value',this.value);">
input[type="date"]:not(:focus):not(.has-value):before
pour afficher le format pendant que l'entrée est focalisée (pour les personnes quiJ'ai utilisé ceci dans mon css:
et mettez quelque chose comme ça dans javascript:
cela fonctionne pour moi pour les appareils mobiles (Ios8 et Android). Mais j'ai utilisé jquery inputmask pour le bureau avec le type de texte d'entrée. Cette solution est un bon moyen si votre code s'exécute sur ie8.
la source
color: #aaa
pour une apparence de type espace réservé sur iOS.color: lightgray
est tout simplement trop léger.$("#myel").on( "input" , function(){ $(this).toggleClass( "full" , $(this).val().length > 0 ); });
À partir d'aujourd'hui (2016), j'ai utilisé avec succès ces 2 extraits (en plus, ils fonctionnent très bien avec Bootstrap4).
Données d'entrée à gauche, espace réservé à gauche
L'espace réservé disparaît lorsque vous cliquez
la source
Selon la norme HTML :
la source
Ça marche pour moi:
la source
:after
pseudo élément lorsqu'une date est sélectionnée. Donc pas besoin de supprimer l'espace réservéonfocus="(this.placeholder='')"
pour supprimer l'espace réservé une fois la date sélectionnée.J'ai utilisé ce whit jQuery: http://jsfiddle.net/daviderussoabram/65w1qhLz/
la source
Sur la base des réponses de deadproxor et d'Alessio, j'essaierais d'utiliser uniquement CSS:
Et si vous avez besoin de rendre l'espace réservé invisible après avoir écrit quelque chose dans l'entrée, nous pourrions essayer d'utiliser les sélecteurs: valid et: invalid, si votre entrée est obligatoire.
ÉDITER
Voici le code si vous utilisez requis dans votre saisie:
la source
Vous avez trouvé une meilleure façon de résoudre votre problème. Je crois que ceci vous aidera. une fois focalisée, la boîte changera le type en texte afin d'afficher votre espace réservé. lorsqu'il est mis au point, son type se transforme en date afin que la vue du calendrier soit affichée.
la source
J'ai pris l'idée de jbarlow, mais j'ai ajouté un if dans la fonction onblur afin que les champs ne changent de type que si la valeur est vide
la source
Résoudre le problème dans la bonne réponse actuelle "cliquer sur le champ affiche le clavier à l'écran au lieu du sélecteur de date":
Le problème est causé par le comportement du navigateur en fonction du type d'entrée lorsque vous cliquez sur (= texte). Par conséquent, il est nécessaire d'arrêter de se concentrer sur l'élément d'entrée (flou), puis de redémarrer la mise au point par programme sur l'élément d'entrée qui a été défini comme type = date par JS dans la première étape. Le clavier s'affiche en mode numéro de téléphone.
la source
essayez ma solution. J'utilise l'attribut 'required' pour savoir si l'entrée est remplie et sinon j'affiche le texte de l'attribut 'placeholder'
la source
Cela m'a pris un certain temps pour comprendre celui-ci, laissez-le tel quel
type="text"
et ajoutezonfocus="(this.type='date')"
, comme indiqué ci-dessus.J'aime même l'idée onBlur mentionnée ci-dessus
<input placeholder="Date" class="textbox-n" type="text" onfocus="(this.type='date')" onblur="(this.type='text')" id="date">
J'espère que cela aidera tous ceux qui n'ont pas tout à fait compris ce qui se passe ci-dessus
la source
Pour résumer le problème des entrées de date:
La solution que j'ai trouvée pour répondre à ces exigences est d'utiliser l'astuce habituelle pour styliser les éléments de formulaire natifs: assurez-vous que l'élément est affiché mais pas visible, et affichez son style attendu via son étiquette associée . En règle générale, l'étiquette s'affiche en tant qu'entrée (y compris un espace réservé), mais au-dessus.
Donc, un HTML comme:
Peut être conçu comme:
Tout événement (clic, focus) sur une telle étiquette associée sera reflété sur le champ lui-même, et déclenchera ainsi l'interface de saisie de la date.
Si vous souhaitez tester une telle solution en direct, vous pouvez exécuter cette version Angular depuis votre tablette ou votre mobile.
la source
Donc, ce que j'ai décidé de faire est enfin ici et cela fonctionne bien sur tous les navigateurs mobiles, y compris les iPhones et les androïdes.
Date
la source
Je travaille avec ionicframework et la solution fournie par @Mumthezir est presque parfaite. Au cas où quelqu'un aurait le même problème que moi (après le changement, l'entrée est toujours focalisée et lors du défilement, la valeur disparaît simplement) J'ai donc ajouté onchange pour faire input.blur ()
la source
Vous pouvez
comme ça...
la source
Nous avons trouvé un meilleur moyen de gérer la compréhension de base de l'utilisateur avec le survol de la souris et l'ouverture du sélecteur de date au 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">
Masquez également la flèche du kit Web et rendez-la à 100% pour couvrir le clic:
la source
Du point de vue angulaire, j'ai réussi à mettre un espace réservé dans l'élément de date de type d'entrée.
Tout d'abord, j'ai défini le css suivant:
La raison pour laquelle cela est nécessaire est que si le contenu css3 a une couleur différente de celle de l'espace réservé normal, j'ai donc dû en utiliser une commune.
Ensuite, dans le modèle utilisé un attribut viewchild birthDate, pour pouvoir accéder à cette entrée depuis le composant. Et défini une expression angulaire sur l'attribut d'espace réservé, qui décidera si nous montrons l'espace réservé ou non. C'est l'inconvénient majeur de la solution, c'est que vous devez gérer la visibilité de l'espace réservé.
la source
Code révisé de mumthezir
la source
Je suis surpris qu'il n'y ait qu'une seule réponse avec une approche similaire à celle que j'ai utilisée.
Je me suis inspiré du commentaire de @ Dtipson sur la réponse de @Mumthezir VP.
J'utilise deux entrées pour cela, l'une est une fausse entrée avec
type="text"
laquelle j'ai défini l'espace réservé, l'autre est le champ réel avectype="date"
.Sur l'
mouseenter
événement sur leur conteneur, je cache la fausse entrée et montre la vraie, et je fais l'inverse sur l'mouseleave
événement. Évidemment, je laisse la vraie entrée visible si une valeur y est définie.J'ai écrit le code pour utiliser du Javascript pur, mais si vous utilisez jQuery (je le fais), il est très facile de le «convertir».
J'ai testé cela également sur un téléphone Android et cela fonctionne, lorsque l'utilisateur appuie sur le champ, le sélecteur de date est affiché. La seule chose est que si l'entrée réelle n'a pas de valeur et que l'utilisateur ferme le sélecteur de date sans choisir une date, l'entrée restera visible jusqu'à ce qu'il touche en dehors de celle-ci. Il n'y a pas d'événement à écouter pour savoir quand le sélecteur de date se ferme, donc je ne sais pas comment résoudre cela.
Je n'ai pas d'appareil iOS pour le tester.
la source
En développant la solution de @ mvp avec javascript discret à l'esprit, voici l'approche:
HTML:
Javascript:
la source
Je pense que tout ce que vous avez à faire est de changer le modèle pour dire que le champ de date est nullable, puis de mettre [Obligatoire] dessus si nécessaire. Si vous faites cela, le texte de l'espace réservé apparaît.
la source
Hé, j'ai rencontré le même problème hier soir et j'ai compris qu'une combinaison de toutes vos réponses et de la magie étincelante faisait du bon travail:
Le HTML:
Le CSS:
Le jQuery:
Explication: Donc, ce qui se passe ici, tout d'abord dans le HTML , c'est assez simple de faire simplement une entrée de date HMTL5 de base et de définir un espace réservé. Prochain arrêt: CSS , nous définissons un: avant-pseudo-élément pour simuler notre espace réservé, il prend juste l'attribut de l'espace réservé de l'entrée elle-même. Je l'ai rendu disponible uniquement à partir d'une largeur de fenêtre de 1024px - pourquoi je vais le dire plus tard. Et maintenant le jQuery , après avoir refactoré plusieurs fois, j'ai trouvé ce bit de code qui vérifiera à chaque changement s'il y a une valeur définie ou non, si ce n'est pas le cas, il (ré) ajoutera la classe, vice-versa .
CONNAÎTRE LES PROBLÈMES:
J'espère que cela pourra aider! cheerio!
la source
Si vous n'êtes concerné que par le mobile:
la source
HTML:
JavaScript:
la source
Voici un autre hack possible n'utilisant pas js et utilisant toujours css
content
. Notez que comme ce:after
n'est pas pris en charge sur certains navigateurs pour les entrées, nous devons sélectionner l'entrée d'une autre manière, même pourcontent attr('')
la source
Cela fonctionne pour moi en utilisant ceci comme élément d'entrée:
Ce CSS montre un espace réservé permanent. La valeur sélectionnée est affichée après l'espace réservé.
J'utilise cette solution pour un formulaire Wordpress avec le plugin contact-form-7.
la source
Aucune des solutions ne fonctionnait correctement pour moi sur Chrome dans iOS 12 et la plupart d'entre elles ne sont pas conçues pour faire face à d'éventuelles entrées de date multiples sur une page. J'ai fait ce qui suit, qui crée essentiellement une fausse étiquette sur l'entrée de date et la supprime au robinet. Je supprime également la fausse étiquette si la largeur de la fenêtre est supérieure à 992px.
JS:
CSS:
la source