J'ai un code JS dans lequel, lorsque vous modifiez un champ, il appelle une routine de recherche. Le problème est que je ne trouve aucun événement jQuery susceptible de se déclencher lorsque Datepicker met à jour le champ de saisie.
Pour une raison quelconque, un événement change n'est pas appelé lorsque Datepicker met à jour le champ. Lorsque le calendrier apparaît, le focus est modifié et je ne peux pas l'utiliser non plus. Des idées?
Vous pouvez utiliser l'événement onSelect
du sélecteur de date .
$(".date").datepicker({
onSelect: function(dateText) {
console.log("Selected date: " + dateText + "; input's current value: " + this.value);
}
});
Exemple en direct :
$(".date")
.datepicker({
onSelect: function(dateText) {
console.log("Selected date: " + dateText + "; input's current value: " + this.value);
}
})
.on("change", function() {
console.log("Got change event from field");
});
<link href="http://code.jquery.com/ui/1.9.2/themes/smoothness/jquery-ui.css" rel="stylesheet" />
<input type='text' class='date'>
<script src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
<script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
Malheureusement, onSelect
se déclenche chaque fois qu'une date est sélectionnée, même si elle n'a pas changé. Ceci est un défaut de conception dans le sélecteur de date: il déclenche toujours onSelect
(même si rien n'a changé), et ne ne déclenche aucun événement sur l'entrée sous-jacente lors de la modification. (Si vous regardez dans le code de cet exemple, nous écoutons les modifications, mais elles ne sont pas levées.) Il devrait probablement déclencher un événement sur l'entrée lorsque les choses changent (peut-être l'événement habituel change
, ou éventuellement un programme spécifique au datepicker).
Bien sûr, si vous le souhaitez, vous pouvez créer l'événement change
sur le input
feu:
$(".date").datepicker({
onSelect: function() {
$(this).change();
}
});
Cela déclenchera change
sur le sous-jacent input
pour tout gestionnaire connecté via jQuery. Mais encore une fois, il toujours le déclenche. Si vous voulez déclencher uniquement sur un changement réel, vous devez enregistrer la valeur précédente (éventuellement via data
) et comparer.
Exemple en direct :
$(".date")
.datepicker({
onSelect: function(dateText) {
console.log("Selected date: " + dateText + "; input's current value: " + this.value);
$(this).change();
}
})
.on("change", function() {
console.log("Got change event from field");
});
<link href="http://code.jquery.com/ui/1.9.2/themes/smoothness/jquery-ui.css" rel="stylesheet" />
<input type='text' class='date'>
<script src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
<script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
T.J. La réponse de Crowder ( --- (https://stackoverflow.com/a/6471992/481154 ) est très bonne et reste exacte. Le déclenchement de l'événement de changement dans la fonction onSelect est aussi proche que possible.
Cependant, il existe une propriété Nice sur l'objet datepicker (lastVal
) qui vous permettra de déclencher conditionnellement l'événement change uniquement sur les modifications effectives sans avoir à stocker la ou les valeurs vous-même:
$('#dateInput').datepicker({
onSelect: function(d,i){
if(d !== i.lastVal){
$(this).change();
}
}
});
Ensuite, gérez les événements de changement comme d'habitude:
$('#dateInput').change(function(){
//Change code!
});
Votre recherche de l'événement onSelect dans l'objet datepicker:
$('.selector').datepicker({
onSelect: function(dateText, inst) { ... }
});
J'ai écrit ceci parce que j'avais besoin d'une solution pour déclencher un événement uniquement si la date était modifiée.
C'est une solution simple. Chaque fois que la boîte de dialogue se ferme, nous testons pour voir si les données ont changé. Si c'est le cas, nous déclenchons un événement personnalisé et réinitialisons la valeur stockée.
$('.datetime').datepicker({
onClose: function(dateText,datePickerInstance) {
var oldValue = $(this).data('oldValue') || "";
if (dateText !== oldValue) {
$(this).data('oldValue',dateText);
$(this).trigger('dateupdated');
}
}
});
Nous pouvons maintenant connecter des gestionnaires pour cet événement personnalisé ...
$('body').on('dateupdated','.datetime', function(e) {
// do something
});
$('#inputfield').change(function() {
dosomething();
});
J'utilise bootstrap-datepicker et aucune des solutions ci-dessus n'a fonctionné pour moi. Cette réponse m'a aidé ..
Voici ce que j'ai appliqué:
$('.date-picker').datepicker({
endDate: new Date(),
autoclose: true,
}).on('changeDate', function(ev){
//my work here
});
J'espère que cela peut aider les autres.
Je sais que c'est une vieille question. Mais je n'ai pas pu faire en sorte que l'événement jQuery $ (this) .change () se déclenche correctement lors de la sélection. Je suis donc allé avec l'approche suivante pour déclencher l'événement de changement via Vanilla js.
$('.date').datepicker({
showOn: 'focus',
dateFormat: 'mm-dd-yy',
changeMonth: true,
changeYear: true,
onSelect: function() {
var event;
if(typeof window.Event == "function"){
event = new Event('change');
this.dispatchEvent(event);
} else {
event = document.createEvent('HTMLEvents');
event.initEvent('change', false, false);
this.dispatchEvent(event);
}
}
});
Sur jQueryUi 1.9, j'ai réussi à le faire fonctionner avec une valeur de données supplémentaire et une combinaison de fonctions beforeShow et onSelect:
$( ".datepicker" ).datepicker({
beforeShow: function( el ){
// set the current value before showing the widget
$(this).data('previous', $(el).val() );
},
onSelect: function( newText ){
// compare the new value to the previous one
if( $(this).data('previous') != newText ){
// do whatever has to be done, e.g. log it to console
console.log( 'changed to: ' + newText );
}
}
});
Travaille pour moi :)
Essayez:
$('#idPicker').on('changeDate', function() {
var date = $('#idPicker').datepicker('getFormattedDate');
});
Essaye ça
$('#dateInput').datepicker({
onSelect: function(){
$(this).trigger('change');
}
}});
J'espère que cela t'aides:)
Ma solution est:
events: { 'apply.daterangepicker #selector': 'function' }
Le manuel dit:
apply.daterangepicker: Triggered when the apply button is clicked, or when a predefined range is clicked
Alors:
$('#daterange').daterangepicker({
locale: { cancelLabel: 'Clear' }
});
$('#daterange').on('apply.daterangepicker', function() {
alert('worked!');
});
Travaille pour moi.
si vous utilisez wdcalendar cela va vous aider
$("#PatientBirthday").datepicker({
picker: "<button class='calpick'></button>",
onReturn:function(d){
var today = new Date();
var birthDate = d;
var age = today.getFullYear() - birthDate.getFullYear();
var m = today.getMonth() - birthDate.getMonth();
if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
age--;
}
$('#ageshow')[0].innerHTML="Age: "+age;
$("#PatientBirthday").val((d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear());
}
});
l'événement surRetour fonctionne pour moi
espérons que cette aide
Ma soluthion:
var $dateInput = $('#dateInput');
$dateInput.datepicker({
onSelect: function(f,d,i){
if(d !== i.lastVal){
$dateInput.trigger("change");
}
}
}).data('datepicker');
$dateInput.on("change", function () {
//your code
});
DatePicker a sélectionné le code d'événement de changement de valeur ci-dessous
/* HTML Part */
<p>Date: <input type="text" id="datepicker"></p>
/* jQuery Part */
$("#datepicker").change(function() {
selectedDate= $('#datepicker').datepicker({ dateFormat: 'yy-mm-dd' }).val();
alert(selectedDate);
});