J'ai un sélecteur de date HTML5.
Il est ouvert lorsque je clique sur la zone de texte du sélecteur de date.
Todo:
Voici le code HTML de mon datepicker:
<img src="date.png" alt="Date Picker" id="datepickericon" />
<input name="calendarselect{ContactID}" class="timeselect" type="date" id="calendar">
<script>
document.getElementById("datepickericon").onclick = function(e){
console.log('inside click');
document.getElementById("calendar").style.visibility="visible";
// document.getElementById("calendar").focus();
// You could write code to toggle this
}
En cliquant sur l'icône, je dois obtenir la vue de calendrier ouverte comme l'image suivante
Le HTML5 <input>
avec type='date'
ne fonctionnera qu'avec peu de navigateurs . De plus, en tant que programmeur, vous n'avez aucun contrôle sur son apparence ou sur tout autre aspect (comme l'afficher et le masquer) ( FAQ rapide sur la date du type d'entrée )
Ainsi, si vous devez le faire, le HTML5 <input type='date'>
tag n'est pas une option. Vous devrez utiliser quelque chose de construit en JavaScript tel que jQuery UI ou Bootstrap sélecteur de date.
Vous devez joindre un événement au clic de l'icône. En supposant que votre code HTML ressemble à ceci:
<img src="date.png" alt="Date Picker" id="datepickericon" />
<input name="calendarselect{ContactID}" class="timeselect" type="date" id="calendar">
Vous devrez vérifier l'événement onclick
sur l'icône et afficher ou masquer le calendrier.
document.getElementById("datepickericon").onclick = function(e){
document.getElementById("calendar").focus();
// You could write code to toggle this
}
Si cela ne vous dérange pas d'avoir l'icône de calendrier dans le champ de saisie de date, une alternative de navigateur consiste à positionner une icône de calendrier au-dessus de l'indicateur de sélection de calendrier triangle, puis définissez l'icône de calendrier sur pointer-events: none
, ce qui entraînera le passage de tous les événements de clic à l'indicateur de sélection de calendrier triangulaire situé en dessous. Je ne suis pas entièrement sûr de la cohérence de la position de l'indicateur du sélecteur de calendrier dans différents navigateurs, mais il devrait être assez similaire. Voir l'exemple ci-dessous.
.sd-container {
position: relative;
float: left;
}
.sd {
border: 1px solid #1cbaa5;
padding: 5px 10px;
height: 30px;
width: 150px;
}
.open-button {
position: absolute;
top: 10px;
right: 3px;
width: 25px;
height: 25px;
background: #fff;
pointer-events: none;
}
.open-button button {
border: none;
background: transparent;
}
<form>
<div class="sd-container">
<input class="sd" type="date" name="selected_date" />
<span class="open-button">
<button type="button">????</button>
</span>
</div>
</form>
Il est également possible de modifier une partie de l'apparence du champ de saisie de date (mais pas le sélecteur de date de calendrier) car il est similaire à un champ de saisie de texte. De plus, il existe un certain nombre de propriétés CSS WebKit qui sont expliquées ici Y a-t-il des options de style pour le sélecteur de date HTML5?
Je réponds à cela, en espérant que quelqu'un de nouveau le trouverait utile: Mon html était comme ceci:
<div class='child_dob input-group <?php echo $user->parent_type>2 ?'hidden':''?>'>
<input type='date' class='form-control hidden' name='dob[]' value='<?php echo $dob?>'>
<div class='form-control datedisplay'>
<?php echo date('m/d/Y',strtotime($dob))?>
</div>
<input type='hidden' value='<?php echo $id?>' name='id[]'>
<div class='input-group-addon'>
<span class='cursor glyphicon glyphicon-remove remove_child_dob'></span>
</div>
</div>
$(function()
{
$(document).on('click','.datedisplay',function()
{
$(this).siblings('[type="date"]').removeClass('hidden').focus().click();
$(this).remove();
});
});
Je l'ai testé sur le simulateur chrome ainsi que sur les appareils Android et cela fonctionne parfaitement. A besoin de tests sur les appareils iOS cependant.
vous pouvez coller l'élément de la date sur l'icône et donner l'opacité d'entrée: 0; et donner une taille de police aussi grande que l'icône est à la date, puis cela fonctionnera
La plupart des navigateurs, sinon tous, concentrent un contrôle de formulaire, si l'utilisateur clique sur la balise label
correspondante. Une solution possible consiste donc à placer l'icône dans une balise label
comme celle-ci:
<label for="dateinput">Birthday:</label>
<input type="date" id="dateinput">
<label for="dateinput">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAA80lEQVRIie2SzQqCQBDHe5/w1kXt1qUFo6NP1Melp8geIvxgyzbJoIJ6gQ1SA6V6AJ1OG0SsaQkWOPCHPfxmf8wwtVoZZcyXKx0TJwe/0TFZZxaYtgOm7UDhvD8aDD0VxazBV5qZwnhPbcfeqNfnCk4qSiiSHg0USW8/p0h84k8qSvgTKE04tBpgTjSwNA0OrcZbAePN8fjBpwookmAhC0BkAY5IzDDBK58qKCJcARbrUES4gvB6gyJSvoCd3Sfv3xBUK6pW9LngHEZfrycII77A3e1vwReSIIzA3e4vXIFuka4xW57ZyHljYBJMsd3hCv6y7o9Nby8uLYYvAAAAAElFTkSuQmCC" style="vertical-align: middle;" alt="Calendar" title="Set focus on birthday field">
</label>
Quelques points à noter cependant:
label
est également utilisée pour connecter la description d'un contrôle de formulaire au contrôle de formulaire lui-même, afin que les technologies d'assistance (par exemple, les lecteurs d'écran) puissent communiquer à l'utilisateur le contrôle de formulaire qu'il a sélectionné. Une mauvaise utilisation de la balise label
juste pour afficher une icône est probablement déconseillée. D'où l'utilisation de deux balises label
qui sont toutes deux liées au même contrôle de formulaire, l'une le décrivant, l'autre pour l'icône de calendrier.