J'ai datepicker
<input type='text' class='inp'>
<script>
$('.inp').datepicker();
$(".inp").on("change",function (){
console.log('inp changed');
});
</script>
Quand je change pour la première fois '.inp', saisissez manuellement une valeur, puis je clique immédiatement sur le calendrier ouvert de datepicker. Je reçois deux écouteurs d'événement 'changement'. D'abord à partir d'un changement manuel, puis à partir d'un changement de datepicker ... Comment puis-je éviter cela?
Définissez votre entrée readOnly
, cela vous aidera à modifier la valeur du champ à l'aide de l'icône uniquement.
<input type='text' class='inp' readOnly />
puis utilisez onSelect
pour obtenir la date sélectionnée, comme suit:
$(function() {
$(".inp").datepicker({
onSelect: function(dateText, inst) {
// alert(dateText);
}
});
});
Essayez d’utiliser la fonction onSelect comme ceci:
$(function() {
$( ".datepicker" ).datepicker({
onSelect: function() {
//your code here
}});
Ceci sera déclenché quand ils choisiront une date dans le calendrier et non quand ils seront en train de taper.
Vous pouvez avoir onSelect déclencher l'événement change sur le champ de texte. Ainsi, modifier la date via la zone de texte ou le sélecteur de date se comporte de la même manière.
$('.inp').datepicker({
onSelect: function() {
return $(this).trigger('change');
}
);
$(".inp").on("change",function (){
console.log('inp changed');
}
Si vous utilisez le programme d'amorçage d’horodatage, vous pouvez procéder comme suit:
$('.datepicker').datepicker()
.on('changeDate', function(e){
# `e` here contains the extra attributes
});
Pour plus de détails, consultez: Événements Bootstrap Datepicker
Merci à tous, c'est ce que j'ai utilisé cependant,
function myfunction(x,x2){
var date1 = new Date(x);
var MyDateString;
MyDateString = date1.getFullYear()+ '/' + ('0' + (date1.getMonth()+1)).slice(-2) + '/' + ('0' + date1.getDate()).slice(-2);
x2.value= MyDateString;
}
x, étant la valeur datepicker et x2 étant l'objet datepicker
Merci! Tout le monde, mais je ne pouvais pas en faire un en lecture seule, c’est une exigence. J'ai donc dû me rechercher. Je poste donc ma solution finale. J'ai fait une déliaison pendant 150 ms, puis une nouvelle liaison . J'ai créé un plugin jquery pour cela
function myfunc(that){
$(that).one('change', function(){
var that = this;
setTimeout(function(){myfunc(that);}, 150);
//some logic
}
)
}
myfunc(".inp");