我有一个使用 struts2-jquery 插件中的 sj:submit 标记提交的表单。提交按钮设置有 validateFunction 和 onAfterValidationTopic。当用户通过 sj:submit 保存此表单时,我正在尝试使用 jquery BlockUI 阻止表单。问题是 BlockUI 直到验证完成后才会打开。由于这种形式非常广泛并且验证需要一秒钟,因此这种时间差距对用户来说非常明显。
BlockUI 是通过添加到按钮的 onClick 参数的 javascript 方法调用的。我已将淡入淡出设置为 0,因此它应该同步执行。
通过断点,我确定 BlockUI 在任何 struts2-jquery 验证方法之前被调用,但是在表单被验证并且它被提交或验证警告被标记之后,块仍然没有出现。
我的操作顺序应该是通过 onClick 参数阻止 UI,让 struts2-jquery 插件提交表单进行验证,然后触发我的 AfterValidationTopic,如果验证不成功,它将解除对 UI 的阻止。所有这些步骤都以正确的顺序发生,除了我没有看到 UI 被阻止。我不知道为什么会这样。我什至尝试将 jquery.struts2.js 文件中的 $.blockUI 调用添加到 $.elem.click 函数中,结果相同。BlockUI 正在被调用,但我没有看到它。
这是我的 JSP:
<sj:submit
button="true"
type="button"
id="save_button"
cssClass="btn bg-cobalt-300"
buttonIcon="icon-floppy-disk"
label="Save"
validate="true"
formIds="my_form"
onAfterValidationTopics="postValidation"
validateFunction="bootstrapValidation"
value="%{getText('global.save')}"
onClick="loadingMaskSave();"
/>
和JS代码:
function loadingMaskSave() {
$.blockUI({
fadeIn: 0
});
}
$.subscribe('postValidation', function (event,data) {
if(event.originalEvent.formvalidate == false) {
$.unblockUI();
}
});