当我在BlockUI(弹出窗口)中打开jQuery UI datepicker并尝试更改月份和年份时,下拉列表无法打开。它在popup中运行良好,但在datepicker的一边。
<div class="popup">
Date Picker<input type="text" class="datepicker" />
</div>
$(document).ready(function(e) {
$.blockUI({
message:$('.popup'),
focusInput: false,
onBlock:function(){}
});
$( ".datepicker" ).datepicker({
dateFormat: 'dd-mm-yy',
changeYear: true,
changeMonth: true,
yearRange: 'c-10:c+3',
showButtonPanel: false
});
});
答案 0 :(得分:11)
这是因为jquery blockUI正在捕捉您的点击事件,请查看其handler()
功能:
// event handler to suppress keyboard/mouse events when blocking
function handler(e) {
// allow tab navigation (conditionally)
[...]
var opts = e.data;
// allow events within the message content
if ($(e.target).parents('div.' + opts.blockMsgClass).length > 0)
return true;
// allow events for content that is not being blocked
return $(e.target).parents().children().filter('div.blockUI').length == 0;
};
因此,您的点击事件将仅传播:
div
的{{1}}(如果您更改了默认的blockMsg
选项值,则为您自己的类)blockMsgClass
css class 问题是jquery-ui datepicker div(.blockUI
)会自动附加到div#ui-datepicker-div
之外,因此无法满足任何这些要求。
因此,快速解决方法是将css类div.popup
添加到datpicker div(它是点击的blockMsg
元素的祖先),如同this jsFiddle中一样。
另一个解决方案是在生成弹出窗格后将其添加到弹出窗口div中,但是当你打开日期选择器时,你会遇到定位问题。