加载图像显示甚至在提交按钮被点击之前。为什么?
loading image displays even before submit button is clicked. Why?
我们希望在单击提交按钮后立即显示 gif 加载消息,然后在数据加载完成后立即消失。
目前效果不是很好。
一旦页面加载但在点击提交按钮之前,gif 加载程序就会显示并保持显示,即使数据加载完成。
我该如何解决这个问题?
$("#btnSubmit").click(function (event) {
event.preventDefault();
if (confirm('Please verify that your information is correct before submitting.')) {
var empComplete = false, sourceComplete = false, spouseComplete = false, dividentComplete = false, reimbursedComplete = false, honorariaComplete = false, giftComplete = false, orgComplete = false, creditorComplete = false;
function checkComplete() {
if (empComplete && sourceComplete && spouseComplete && dividentComplete && reimbursedComplete && honorariaComplete && giftComplete && orgComplete && creditorComplete) {
$("#result").text("Thank you! You have successfully completed this form");
}
}
//Loading message handler
var $loading = $('#loadingDiv').hide();
$(document)
.ajaxStart(function () {
$loading.show();
})
.ajaxStop(function () {
$loading.hide();
});
$("#result").text("");
var data = JSON.stringify(getAllEmpData());
console.log(data);
$.ajax({
url: 'disclosures.aspx/SaveEmpData',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify({ 'empdata': data }),
async: false,
success: function () {
empComplete = true;
checkComplete();
},
error: function () {
alert("Error while inserting data");
}
});
}
)};
...
...
</script>
//Markup
<input type="submit" id="btnSubmit" class="btn btn-primary btn-md pull-center btn-sm" value="Submit" /><img id="loadingDiv" src="images/ajax-loader.gif" alt="Loading..." />
<output id="result" style="margin-bottom:300px;margin-left:250px;color:#3c890e;font-weight:bold;font-size:18px;"></output>
只需将 'display: none;' 放入 img 开头:
<img id="loadingDiv" style="display:none;" src="images/ajax-loader.gif" alt="Loading..." />
或在文档准备好时将其隐藏。
还要隐藏加载 gif,将其隐藏在您的成功和错误函数中或 'complete'。
ajax停止检查页面上的所有 ajax 请求,而不仅仅是您正在发出的请求,来自 jQuery 文档:
注册一个处理程序,当所有 Ajax 请求完成时调用。
也不要在 'success' 或 'error' 或 'complete' 函数中使用你的 $loadingDiv 变量,它们是异步的,除非你传递它,否则变量将超出范围。再次 select div 和 jquery。
我们希望在单击提交按钮后立即显示 gif 加载消息,然后在数据加载完成后立即消失。
目前效果不是很好。
一旦页面加载但在点击提交按钮之前,gif 加载程序就会显示并保持显示,即使数据加载完成。
我该如何解决这个问题?
$("#btnSubmit").click(function (event) {
event.preventDefault();
if (confirm('Please verify that your information is correct before submitting.')) {
var empComplete = false, sourceComplete = false, spouseComplete = false, dividentComplete = false, reimbursedComplete = false, honorariaComplete = false, giftComplete = false, orgComplete = false, creditorComplete = false;
function checkComplete() {
if (empComplete && sourceComplete && spouseComplete && dividentComplete && reimbursedComplete && honorariaComplete && giftComplete && orgComplete && creditorComplete) {
$("#result").text("Thank you! You have successfully completed this form");
}
}
//Loading message handler
var $loading = $('#loadingDiv').hide();
$(document)
.ajaxStart(function () {
$loading.show();
})
.ajaxStop(function () {
$loading.hide();
});
$("#result").text("");
var data = JSON.stringify(getAllEmpData());
console.log(data);
$.ajax({
url: 'disclosures.aspx/SaveEmpData',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify({ 'empdata': data }),
async: false,
success: function () {
empComplete = true;
checkComplete();
},
error: function () {
alert("Error while inserting data");
}
});
}
)};
...
...
</script>
//Markup
<input type="submit" id="btnSubmit" class="btn btn-primary btn-md pull-center btn-sm" value="Submit" /><img id="loadingDiv" src="images/ajax-loader.gif" alt="Loading..." />
<output id="result" style="margin-bottom:300px;margin-left:250px;color:#3c890e;font-weight:bold;font-size:18px;"></output>
只需将 'display: none;' 放入 img 开头:
<img id="loadingDiv" style="display:none;" src="images/ajax-loader.gif" alt="Loading..." />
或在文档准备好时将其隐藏。
还要隐藏加载 gif,将其隐藏在您的成功和错误函数中或 'complete'。
ajax停止检查页面上的所有 ajax 请求,而不仅仅是您正在发出的请求,来自 jQuery 文档: 注册一个处理程序,当所有 Ajax 请求完成时调用。
也不要在 'success' 或 'error' 或 'complete' 函数中使用你的 $loadingDiv 变量,它们是异步的,除非你传递它,否则变量将超出范围。再次 select div 和 jquery。