如果您dataUrl
在表单编辑中使用,则 jqGrid 会调用内部$.jgrid.createEl
方法来发出$.ajax
请求dataUrl
(请参阅代码片段)。$.ajax
不使用beforeSend
或complete
回调,它使用带有表示已填充属性的context
选项。elem
<select>
所以我的建议是使用带有和回调ajaxSelectOptions
的 jqGrid 选项。在回调内部,您可以创建一些或带有一些加载动画。有很多方法可以从简单的 gif 开始实现动画,直到使用 CSS3动画和@keyframes 之类的nprogress(参见此处)。beforeSend
complete
beforeSend
<div>
<span>
我使用jQuery UI 1.8.2 中的ui-anim_basic_16x16.gif来定义以下 CSS 类:
.my-select-loading {
background: white url('ui-anim_basic_16x16.gif') right center no-repeat;
height: 16px;
width: 16px;
margin-left: .5em;
display: inline-block;
}
jqGrid的选项ajaxSelectOptions
我这样定义
ajaxSelectOptions: {
beforeSend: function () {
var context = this;
if (context.elem) { // if it called by $.jgrid.createEl
context.loading = true;
setTimeout(function () {
if (context.loading) {
$("<span>").addClass("my-select-loading")
.insertAfter($(context.elem));
}
}, 50);
}
},
complete: function() {
if (this.elem) {
this.loading = false;
var $span = $(this.elem).next("span.ui-autocomplete-loading");
$span.remove();
}
}
}
上面的代码附加了具有类<select>
的空<span>
元素my-select-loading
。只有当服务器在 50 毫秒内没有响应时,我们才会这样做dataUrl
(请参阅选项 50 setTimeout
)。complete
在失败的情况下以及在成功响应的情况下都调用内部dataUrl
。结果,用户将看到类似
上面的代码只是实现的一个例子。使用 . 创建动画元素可能会更好position: absolute
。为了在使用上述代码的情况下具有良好的外观,width
表单的表单应该足够大以显示插入<span>
的动画 gif。