如果表单无效,则无法阻止模态显示:ajax 的订单顺序有问题
Unable to prevent modal displaying if form is not valid: problem with order sequence with ajax
我有一个带有表单 (id = form_unblind_form) 和有效按钮 (id = unblind_edit) 的 Django 应用程序。
我想使用 ajax 查询显示包含来自数据库的信息的模式。
它有效,但存在异常行为。
问题在于,由于 modal.sow() 被成功调用 ajax return,即使表单无效,也会显示模态,这不是正确的行为
但我可以找到合适的算法来做到这一点
感谢帮助
//1. first form submission is prevented until OK button on modal is clicked
$("#form_unblind_edit").submit(function (event) {
if (!prevent_edit) {
event.preventDefault();
}
});
//2. I query database to recovered information for modal
$("#unblind_edit").on("click", function (event) {
var csrftoken = getCookie('csrftoken');
var patient = $("#id_pat").val();
var treatment = $("#id_unb_num").val();
$.ajax({
type: "POST",
url: '/unblind/already_unblind/',
data: {
csrfmiddlewaretoken: csrftoken,
'patient': patient,
'treatment': treatment
},
dataType: 'html',
success: function (data) {
$("#popup").html(data);
$('#unblindconfirm').modal('show'); //<- PROBLEM HERE as modal is always displayed
},
});
});
//3. If user click on OK button, form is finally submitted
$("body")
.on('click', '#edit_button_OK', function (event) {
$('#edit_button_OK').attr("disabled", "disabled");
prevent_edit = true;
$("#form_unblind_edit").submit();
})
你不应该在 unblind_edit 按钮上调用 ajax
为 ajax 查询创建一个函数,该函数在表单首次提交且数据尚不可用时调用
尝试为 ajax 成功响应添加标志
var ajax_success = false
//1. first form submission is prevented until OK button on modal is clicked
// ajax query is called if not yet succeded, else modal is show
$("#form_unblind_edit").submit(function (event) {
if (!prevent_edit) {
event.preventDefault();
}
if (!ajax_success) {
ajax(); //call ajax to recovered data
} else if (ajax_success) {
$('#unblindconfirm').modal('show');
}
});
function ajax() {
...
$.ajax({
...
success: function (data) {
...
ajax_success = true;
$("#form_unblind_edit").submit(); //form submission to display modal
},
});
}
我有一个带有表单 (id = form_unblind_form) 和有效按钮 (id = unblind_edit) 的 Django 应用程序。 我想使用 ajax 查询显示包含来自数据库的信息的模式。 它有效,但存在异常行为。
问题在于,由于 modal.sow() 被成功调用 ajax return,即使表单无效,也会显示模态,这不是正确的行为
但我可以找到合适的算法来做到这一点
感谢帮助
//1. first form submission is prevented until OK button on modal is clicked
$("#form_unblind_edit").submit(function (event) {
if (!prevent_edit) {
event.preventDefault();
}
});
//2. I query database to recovered information for modal
$("#unblind_edit").on("click", function (event) {
var csrftoken = getCookie('csrftoken');
var patient = $("#id_pat").val();
var treatment = $("#id_unb_num").val();
$.ajax({
type: "POST",
url: '/unblind/already_unblind/',
data: {
csrfmiddlewaretoken: csrftoken,
'patient': patient,
'treatment': treatment
},
dataType: 'html',
success: function (data) {
$("#popup").html(data);
$('#unblindconfirm').modal('show'); //<- PROBLEM HERE as modal is always displayed
},
});
});
//3. If user click on OK button, form is finally submitted
$("body")
.on('click', '#edit_button_OK', function (event) {
$('#edit_button_OK').attr("disabled", "disabled");
prevent_edit = true;
$("#form_unblind_edit").submit();
})
你不应该在 unblind_edit 按钮上调用 ajax
为 ajax 查询创建一个函数,该函数在表单首次提交且数据尚不可用时调用 尝试为 ajax 成功响应添加标志
var ajax_success = false
//1. first form submission is prevented until OK button on modal is clicked
// ajax query is called if not yet succeded, else modal is show
$("#form_unblind_edit").submit(function (event) {
if (!prevent_edit) {
event.preventDefault();
}
if (!ajax_success) {
ajax(); //call ajax to recovered data
} else if (ajax_success) {
$('#unblindconfirm').modal('show');
}
});
function ajax() {
...
$.ajax({
...
success: function (data) {
...
ajax_success = true;
$("#form_unblind_edit").submit(); //form submission to display modal
},
});
}