Javascript/jQuery等待变量true
我有以下设置:Javascript/jQuery等待变量true,javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,我有以下设置: 一个文档可以有多个表单 当输入字段上的输入发生更改时,jQuery将触发ajax事件。然后调用input.data(“checking”,true) 当ajax事件完成时,调用input.data(“checking”,false) 现在我想制作一个自定义的表单提交,它等待此表单中的所有输入都打开输入。数据(“检查”)==true 到目前为止,我的代码没有问题: $(document).on("submit", "form", function(event) {
- 一个文档可以有多个表单
- 当
字段上的输入发生更改时,输入
将触发jQuery
事件。然后调用ajax
input.data(“checking”,true)
- 当
事件完成时,调用ajax
input.data(“checking”,false)
表单
提交
,它等待此表单
中的所有输入
都打开输入。数据(“检查”)==true
到目前为止,我的代码没有问题:
$(document).on("submit", "form", function(event) {
event.target.checkValidity();
event.preventDefault();
event.stopPropagation();
//TODO: prevent this when not everything is checked
var dataSerialized = $(this).serialize();
var service = $(this).attr("action");
$.ajax({
url: "services/" + service + ".php",
data: dataSerialized,
type: "POST",
cache: false,
success: function(html) {
if (html == "1") {
//TODO: load page from json callback
//loadPage(onsuccess);
}
else {
loadPage("error");
}
},
error: function(html, message) {
finalError(message);
}
});
});
如何使该函数等待(非阻塞!)直到所有的ajax事件完成?假设创建一个函数
checkDone
,当input.data(“checking”)==false
对于表单中的所有input
时,该函数返回true
,您可以执行以下操作:
$(document).on("submit", "form", function(event) {
event.target.checkValidity();
event.preventDefault();
event.stopPropagation();
var that = $(this);
var interval = setInterval(function() {
if(checkDone(that)) {
clearInterval(interval);
var dataSerialized = that.serialize();
var service = that.attr("action");
$.ajax({
url: "services/" + service + ".php",
data: dataSerialized,
type: "POST",
cache: false,
success: function(html) {
if (html == "1") {
//TODO: load page from json callback
//loadPage(onsuccess);
}
else {
loadPage("error");
}
},
error: function(html, message) {
finalError(message);
}
});
}
}, 500);
});
通过这种方式,每0.5秒检查一次是否可以在验证所有输入后提交表单,如果可以,则清除间隔并提交表单
但是我建议不要在提交后删除标准服务器端验证。这不能阻止浏览器,对吗?在现代浏览器中,一切都应该在独立的线程中运行。别担心,还有服务器端验证,这只是为了用户体验。这不会阻止浏览器,不会,但我还没有机会测试它。