Bootstrap Datepicker更改触发3次

嗨,我一直试图获得一个引导日期选择器的日期,并且已经能够但它似乎发射了3次。 注意:这不是jquery日期选择器,而是引导日期选择器。

使用这个日期选择器: https : //github.com/eternicode/bootstrap-datepicker ,而不是旧的eyecon.ro one。

$(".date-picker").on("change", function(e) { contents = $(this).val(); id = $(this).attr('id'); console.log("onchange contents: " + contents); console.log("onchange id: " + id); }); 

HTML:

  

除了改变之外,我还使用了其他一些选项

 $('.date-picker').datepicker().change(function(){}; 

但这并没有关闭日期选择器,希望有一个简单的解决方案。 谢谢

它没有解决问题,但是我使用datepicker发送ajaxpost,所以3个更改事件导致我出现问题 – 第3个事件总是失败。 即使文档说要使用changeDate事件,我似乎也不应该触发输入标记的更改事件3次。 价值不变3次!

我写了一个简单的’去抖’function来解决这个问题。 没有解决问题 – 这是由于从方法触发的多个更改事件:setValue(第508行)_setDate :(第1048行)和setValue(第508行)(版本1.3.0)的小部件。

  var lastJQueryTS = 0 ;// this is a global variable. .... // in the change event handler... var send = true; if (typeof(event) == 'object'){ if (event.timeStamp - lastJQueryTS < 300){ send = false; } lastJQueryTS = event.timeStamp; } if (send){ post_values(this); } 

它非常简单,只需找到jquery'event',并确保忽略300ms窗口中的值。 在我的测试中,这一切都发生在30毫秒左右。

您应该使用“changeDate”事件。 例如:

 var datePicker = $('.date-picker').datePicker().on('changeDate', function(ev) { //Functionality to be called whenever the date is changed }); 

有关此活动的更多信息,请查看此处的文档。

与上面的答案类似,但你应该使用datepicker,除非你重命名了这个函数:

 var datePicker = $('.date-picker').datepicker().on('changeDate', function(ev) { //Functionality to be called whenever the date is changed }); 

这对我有用,除了在我的情况下,我将函数重命名为datepickerBootstrap以避免与JQuery的冲突。 那么它会成为:

 var datePicker = $('.date-picker').datepickerBootstrap().on('changeDate', function(ev) { // On change functionality }); 

看起来好像在检查change事件时,如果更改来自实际的用户交互 ,则change事件包含originalEvent的值。

如果输入是通过JS更改的,则事件包含此值: $obj.val('1990-03-07').change()和bootstrap-datepicker相同

这是我如何设置它:

通用初始设置

 // General selector for date inputs var $obj = $('input[type="date"]'); $obj.datepicker({ // options here, not important for this example }); 

处理bootstrap-datepicker特定的更改

 $obj.datepicker().on('changeDate', function (event) { handleInputDateAndTimeChange(event); }); 

现在,处理用户交互更改

 $('input[type="date"], input[type="time"]').change(function (event) { // This checks if change was initiated by user input and NOT JS if(event.originalEvent !== undefined) { handleInputDateAndTimeChange(event); } }); 

最后,这是handleInputDateAndTimeChange函数

 function handleInputDateAndTimeChange(event) { var $input = $(event.target); // Do what you want with $input object here... } 

我尝试了#pgee70的答案,它对我不起作用。 所以这是我的解决方案,希望对它有所帮助

 var send=true; $('.input-group.date').datepicker({ todayBtn: "linked", keyboardNavigation: false, forceParse: false, language: 'es-ES', weekStart: 1, format: 'dd/mm/yyyy', enableOnReadonly:false, calendarWeeks: true, autoclose: true, todayHighlight:true }).on("changeDate", function(e) { if(send){ modificarFechaAplicacionCliente($("#input_filtro_fecha_cliente").val()); send=false; } setTimeout(function(){send=true;},200); }); 

这不是一个好的解决方案,但它的工作。

获取全局变量计数并检查是否等于0然后执行您的函数。

 var count=0; $( "#Id" ).datepicker({ minDate: 0}).on('change',function (){ if(count==0) validity();//any function count=1; }); validity(){ count=0;} 

有点烦人..我的代码是:

 var c=0;var send=false; $(document).ready(function() { jQuery( ".ed" ).datepicker({ format: "yyyy-mm-dd", autoclose:!0 }).on('change',function() { if(c==2){ c=0; send=true; }else{ c++; send=false; } }); }); 

正如一些人已经提到的,使用这个:

 $('#calendar').on("changeDate", function() { }); 

诀窍是使用changeDate而不是change

请使用changeDate函数代替更改。

修复了这里找到你固定的js datepicker文件

阅读修复说明在这里

 var pickerFireCount = 0; function checkSelectedDateIsHollyday(rId) { pickerFireCount++; if (pickerFireCount == 3) { if (!selectedDateIsHolyday(rId)) { showInfoMessage('The date you selected is a holiday.'); pickerFireCount = 0; } } }