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; } } }