Ich habe Datepicker
<input type='text' class='inp'>
<script>
$('.inp').datepicker();
$(".inp").on("change",function (){
console.log('inp changed');
});
</script>
Wenn ich '.inp' zum ersten Mal ändere, gebe ich einen Wert ein, dann klicke ich sofort auf den geöffneten Kalender von datepicker. Ich bekomme zwei 'Change'-Event-Hörer. Zuerst von Hand ändern, dann von Datepicker ändern ... Wie kann ich das vermeiden?
Stellen Sie Ihre Eingabe readOnly
ein, damit Sie den Feldwert nur über das Symbol ändern können.
<input type='text' class='inp' readOnly />
verwenden Sie dann onSelect
, um das ausgewählte Datum wie folgt abzurufen:
$(function() {
$(".inp").datepicker({
onSelect: function(dateText, inst) {
// alert(dateText);
}
});
});
Verwenden Sie die onSelect-Funktion wie folgt:
$(function() {
$( ".datepicker" ).datepicker({
onSelect: function() {
//your code here
}});
Dies wird ausgelöst, wenn ein Datum aus dem Kalender ausgewählt wird und nicht, wenn es eingegeben wird.
Sie können onSelect das Änderungsereignis im Textfeld auslösen lassen. Auf diese Weise verhält sich das Bearbeiten des Datums über das Textfeld oder über die Datumsauswahl gleich.
$('.inp').datepicker({
onSelect: function() {
return $(this).trigger('change');
}
);
$(".inp").on("change",function (){
console.log('inp changed');
}
Wenn Sie den Bootstrap-Datepicker verwenden, können Sie Folgendes tun:
$('.datepicker').datepicker()
.on('changeDate', function(e){
# `e` here contains the extra attributes
});
Für weitere Details: Bootstrap Datepicker-Ereignisse
Vielen Dank an alle, das ist was ich benutzt habe,
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 ist der Datepicker-Wert und x2 das Datepicker-Objekt
Versuche dies
$(function() {
$("#birth_date").datepicker({
onSelect: function() {
console.log("You Code Here");
}});
});
Vielen Dank! Alle, aber ich konnte nicht Feldleser machen, das ist Voraussetzung. Also musste ich mich selbst erforschen. Also poste ich meine endgültige Lösung. Ich habe mich für 150 ms aufgelöst und dann wieder gebunden . ich habe dafür ein Jquery-Plugin erstellt
function myfunc(that){
$(that).one('change', function(){
var that = this;
setTimeout(function(){myfunc(that);}, 150);
//some logic
}
)
}
myfunc(".inp");