如何在 JQueryUI DatePicker 控件中显示 'loading' 文本 onChangeMonthYear?
How may I display 'loading' text onChangeMonthYear in the JQueryUI DatePicker control?
JQueryUI 日期选择器控件有一个调用基于 REST 的服务来获取日期的 onChangeMonthYear 方法。从 return 到 UI 的日期,该服务需要一些时间并且日历似乎挂起大约。切换到新月份前两秒钟。
我希望在调用服务和处理 returning 数据时显示某种类型的 'loading...' 文本或旋转图形。
我尝试使用 $("#checkingAvailability").show(); 设置要在通话期间显示的标签;但是,UI 直到数据被 returned 后才会更新。
我真正需要做的是在基于 REST 的服务处理 returning 数据时隐藏日历控件并显示 'loading...' 标签或图形,然后再次显示日历一次结果成功了。
任何人都可以指出正确的方向或提供一些示例代码吗?我很难过。
由于 DatePicler 小部件的性质不断变化,您可以考虑制作一个加载 gif 和阴影,可以根据需要取消隐藏或显示出来。由于我无法复制您未提供的示例,因此我可以提供这样的示例。
$(function() {
function makeLoader(cnt, img) {
return $("<div>", {
class: "ui-datepicker-loading"
})
.css({
background: "rgba(0,0,0,0.65)",
width: "272px",
height: "224px",
"border-radius": "3px",
color: "white",
"text-align": "center"
})
.html("<p style='padding-top: 100px'>" + cnt + "</p><img width='20' src='" + img + "'></img>")
.appendTo("body")
.hide();
}
function showLoader(tObj) {
$(".ui-datepicker-loading").show().position({
my: "left top",
at: "left+3 top+3",
of: tObj
}).css("z-index", 1001);
}
function hideLoader() {
$(".ui-datepicker-loading").hide().position({
my: "left top",
at: "left-300 top-300",
of: $("body")
}).css("z-index", 0);
}
$("#datepicker").datepicker({
changeMonth: true,
changeYear: true,
onChangeMonthYear: function(yy, mm, dp) {
showLoader($(this).datepicker("widget"));
setTimeout(hideLoader, 2000);
}
});
var l = makeLoader("Getting dates...", "https://i.gifer.com/ZKZg.gif");
});
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<p>Date: <input type="text" id="datepicker"></p>
第一次调用回调时,我们会显示正在加载的元素。一旦收集到数据,我们就可以隐藏它。
JQueryUI 日期选择器控件有一个调用基于 REST 的服务来获取日期的 onChangeMonthYear 方法。从 return 到 UI 的日期,该服务需要一些时间并且日历似乎挂起大约。切换到新月份前两秒钟。
我希望在调用服务和处理 returning 数据时显示某种类型的 'loading...' 文本或旋转图形。
我尝试使用 $("#checkingAvailability").show(); 设置要在通话期间显示的标签;但是,UI 直到数据被 returned 后才会更新。
我真正需要做的是在基于 REST 的服务处理 returning 数据时隐藏日历控件并显示 'loading...' 标签或图形,然后再次显示日历一次结果成功了。
任何人都可以指出正确的方向或提供一些示例代码吗?我很难过。
由于 DatePicler 小部件的性质不断变化,您可以考虑制作一个加载 gif 和阴影,可以根据需要取消隐藏或显示出来。由于我无法复制您未提供的示例,因此我可以提供这样的示例。
$(function() {
function makeLoader(cnt, img) {
return $("<div>", {
class: "ui-datepicker-loading"
})
.css({
background: "rgba(0,0,0,0.65)",
width: "272px",
height: "224px",
"border-radius": "3px",
color: "white",
"text-align": "center"
})
.html("<p style='padding-top: 100px'>" + cnt + "</p><img width='20' src='" + img + "'></img>")
.appendTo("body")
.hide();
}
function showLoader(tObj) {
$(".ui-datepicker-loading").show().position({
my: "left top",
at: "left+3 top+3",
of: tObj
}).css("z-index", 1001);
}
function hideLoader() {
$(".ui-datepicker-loading").hide().position({
my: "left top",
at: "left-300 top-300",
of: $("body")
}).css("z-index", 0);
}
$("#datepicker").datepicker({
changeMonth: true,
changeYear: true,
onChangeMonthYear: function(yy, mm, dp) {
showLoader($(this).datepicker("widget"));
setTimeout(hideLoader, 2000);
}
});
var l = makeLoader("Getting dates...", "https://i.gifer.com/ZKZg.gif");
});
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<p>Date: <input type="text" id="datepicker"></p>
第一次调用回调时,我们会显示正在加载的元素。一旦收集到数据,我们就可以隐藏它。