JQuery Datepicker onchange事件帮助!

我有JS代码,当你改变一个字段,它会调用search例程….问题是我找不到一个Jquery事件,当dateselect器更新input字段时,将触发。

出于某种原因,当datepicker更新字段时,不会调用更改事件。 当日历popup时,它会改变焦点,所以我也不能使用它。 有任何想法吗?

您可以使用datepicker的onSelect事件 。

 $(".date").datepicker({ onSelect: function(dateText) { display("Selected date: " + dateText + "; input's current value: " + this.value); } }); 

现场示例

 jQuery(function($) { $(".date").datepicker({ onSelect: function(dateText) { display("Selected date: " + dateText + "; input's current value: " + this.value); } }).on("change", function() { display("Got change event from field"); }); function display(msg) { $("<p>").html(msg).appendTo(document.body); } }); 
 <link href="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> 

TJ Crowder的回答( https://stackoverflow.com/a/6471992/481154 )非常好,仍然准确。 触发onSelect函数内的更改事件就像您将要获得的一样。

但是, lastVal对象( lastVal )上有一个很好的属性,它允许您仅在实际更改时才有条件地触发change事件,而不必亲自存储值(s):

 $('#dateInput').datepicker({ onSelect: function(d,i){ if(d !== i.lastVal){ $(this).change(); } } }); 

然后就像正常一样处理更改事件:

 $('#dateInput').change(function(){ //Change code! }); 

您在datepicker对象中寻找onSelect事件:

 $('.selector').datepicker({ onSelect: function(dateText, inst) { ... } }); 
 $('#inputfield').change(function() { dosomething(); }); 

我写了这个,因为我需要一个解决scheme来触发一个事件,只有当date改变。

这是一个简单的解决scheme。 每次对话框closures,我们都会testing数据是否发生了变化。 如果有,我们触发一个自定义事件并重置存储的值。

 $('.datetime').datepicker({ onClose: function(dateText,datePickerInstance) { var oldValue = $(this).data('oldValue') || ""; if (dateText !== oldValue) { $(this).data('oldValue',dateText); $(this).trigger('dateupdated'); } } }); 

现在我们可以连接那个自定义事件的处理程序

 $('body').on('dateupdated','.datetime', function(e) { // do something }); 

在jQueryUi 1.9上,我设法通过附加的数据值和beforeShow和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, eg log it to console console.log( 'changed to: ' + newText ); } } }); 

适用于我:)

尝试这个

 $('#dateInput').datepicker({ onSelect: function(){ $(this).trigger('change'); } }}); 

希望这可以帮助:)

我正在使用bootstrap datepicker和以上都没有解决scheme为我工作。 这个答案帮助我..

引导dateselect器更改date事件不会触发手动编辑date或清除date

这是我申请的:

  $('.date-picker').datepicker({ endDate: new Date(), autoclose: true, }).on('changeDate', function(ev){ //my work here }); 

希望这可以帮助别人。

DatePickerselect下面的值更改事件代码

 /* 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); }); 

如果你使用wdcalendar,这将帮助你

  $("#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()); } }); 

在返回的事件为我工作

希望这个帮助

我知道这是一个古老的问题。 但我不能让jquery $(this).change()事件正确激发onSelect。 所以我采用以下方法通过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); } } }); 

手册说:

 apply.daterangepicker: Triggered when the apply button is clicked, or when a predefined range is clicked 

所以:

 $('#daterange').daterangepicker({ locale: { cancelLabel: 'Clear' } }); $('#daterange').on('apply.daterangepicker', function() { alert('worked!'); }); 

为我工作。