我有一段JS代码,在更改字段时会调用搜索程序。问题在于,我找不到任何jQuery事件,可以在Datepicker更新输入字段时触发。
由于某种原因,当Datepicker更新字段时,不会调用“change”事件。当日历弹出时,它会改变焦点,因此我也无法使用它。你有什么想法吗?
我有一段JS代码,在更改字段时会调用搜索程序。问题在于,我找不到任何jQuery事件,可以在Datepicker更新输入字段时触发。
由于某种原因,当Datepicker更新字段时,不会调用“change”事件。当日历弹出时,它会改变焦点,因此我也无法使用它。你有什么想法吗?
onSelect
事件。$(".date").datepicker({
onSelect: function(dateText) {
console.log("Selected date: " + dateText + "; input's current value: " + this.value);
}
});
实时演示:
$(".date")
.datepicker({
onSelect: function(dateText) {
console.log("Selected date: " + dateText + "; input's current value: " + this.value);
}
})
.on("change", function() {
console.log("Got change event from field");
});
<link href="https://code.jquery.com/ui/1.9.2/themes/smoothness/jquery-ui.css" rel="stylesheet" />
<input type='text' class='date'>
<script src="https://code.jquery.com/jquery-1.8.3.min.js"></script>
<script src="https://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
很不幸,onSelect
事件在选择日期时总是触发,即使日期未改变也是如此。这是日期选择器的一个设计缺陷:它总是触发onSelect
(即使没有任何更改),并且在输入框上不会触发任何更改事件。(如果您查看示例代码,我们正在监听更改事件,但它们没有被触发。)当事情改变时,它应该在输入框上触发一个事件(可能是通常的change
事件,或者可能是一个特定于日期选择器的事件)。
如果需要,您当然可以让input
元素上的change
事件触发:
$(".date").datepicker({
onSelect: function() {
$(this).change();
}
});
这将会触发 jQuery 钩子上所有处理程序的基础 input
的 change
事件。但是,它总是触发。如果您只想在实际更改时触发,请保存先前的值(可能通过data
)并进行比较。
现场示例:
$(".date")
.datepicker({
onSelect: function(dateText) {
console.log("Selected date: " + dateText + "; input's current value: " + this.value);
$(this).change();
}
})
.on("change", function() {
console.log("Got change event from field");
});
<link href="https://code.jquery.com/ui/1.9.2/themes/smoothness/jquery-ui.css" rel="stylesheet" />
<input type='text' class='date'>
<script src="https://code.jquery.com/jquery-1.8.3.min.js"></script>
<script src="https://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
$(".date").datepicker('option', 'onSelect', function() { $(this).change(); });
。这将在选择日期时触发一个change事件。 - Brad Denver$('#dateInput').datepicker({
onSelect: function(d,i){
if(d !== i.lastVal){
$(this).change();
}
}
});
$('#dateInput').change(function(){
//Change code!
});
datepicker
对象上不存在lastVal
,因此此解决方案将始终触发更改。 - Nicholas Head你正在寻找日期选择器对象中的onSelect事件:
$('.selector').datepicker({
onSelect: function(dateText, inst) { ... }
});
$('#inputfield').change(function() {
dosomething();
});
我写这篇文章是因为需要一个只在日期改变时触发事件的解决方案。
这是一个简单的解决方案。每次对话框关闭时,我们测试是否已更改数据。如果已更改,则触发自定义事件并重置存储的值。
$('.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
});
我正在使用bootstrap-datepicker,上述解决方案都没有帮助到我。这个答案对我很有帮助..
bootstrap日期选择器在手动编辑日期或清除日期时不触发更改日期事件
以下是我所应用的内容:
$('.date-picker').datepicker({
endDate: new Date(),
autoclose: true,
}).on('changeDate', function(ev){
//my work here
});
希望这能帮助到其他人。
请尝试:
$('#idPicker').on('changeDate', function() {
var date = $('#idPicker').datepicker('getFormattedDate');
});
我知道这是一个老问题。但是我无法在onSelect事件中正确地触发jquery $(this).change()事件。所以我采用了以下方法通过vanilla js触发change事件。
$('.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);
}
}
});
试试这个
$('#dateInput').datepicker({
onSelect: function(){
$(this).trigger('change');
}
}});
$( ".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, e.g. log it to console
console.log( 'changed to: ' + newText );
}
}
});
对我来说没问题 :)