Jquery datepicker更改事件触发器和输入的默认更改事件

我有datepicker

  $('.inp').datepicker(); $(".inp").on("change",function (){ console.log('inp changed'); });  

当我第一次更改’.inp’时手动输入一个值,然后立即点击datepicker的打开日历。 我得到两个’更改’事件监听器。 首先来自手动更改,然后来自datepicker更改。 我怎么能避免这个?

设置输入readOnly ,它将帮助您仅通过图标更改字段的值。

  

然后使用onSelect获取所选日期,如下所示:

 $(function() { $(".inp").datepicker({ onSelect: function(dateText, inst) { // alert(dateText); } }); }); 

尝试使用onSelect函数,如:

 $(function() { $( ".datepicker" ).datepicker({ onSelect: function() { //your code here }}); 

当他们从日历中选择日期而非他们正在键入时,将触发此操作。

您可以让onSelect触发文本字段上的更改事件。 这种方式通过文本框或日期选择器编辑日期的行为相同。

 $('.inp').datepicker({ onSelect: function() { return $(this).trigger('change'); } ); $(".inp").on("change",function (){ console.log('inp changed'); } 

如果您使用引导日期选择器,则可以执行以下操作:

 $('.datepicker').datepicker() .on('changeDate', function(e){ # `e` here contains the extra attributes }); 

有关更多详细信息,请参阅: Bootstrap Datepicker事件

谢谢! 每个人,但我不能将字段只读一个,这是要求。 所以我不得不重新研究自己。 所以我发布我的最终解决方案。 我解除了150毫秒的绑定,然后重新绑定。 我为此制作了一个jquery插件

 function myfunc(that){ $(that).one('change', function(){ var that = this; setTimeout(function(){myfunc(that);}, 150); //some logic } ) } myfunc(".inp"); 

谢谢大家,这就是我用过的东西,

 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,是datepicker值,x2是datepicker对象

如果你使用jquery的日期选择器,则不需要压延事件。 你可以在文本框“textchanged”上触发事件