行动问题和表单提交
Issue with action and onsubmit in form
我在 HTML 中有一个表单,我在其中使用 onsubmit 来验证输入和操作以在表单提交时调用 URL。这是我的 HTML 代码:
<form method="POST" onsubmit="return validateInput();" action="editConf" id="edit-form">
// HTML Form code
<div class="modal-footer">
<p id = "edit-footer" align="center"> </p>
<button type="reset" onClick="resetForm()" class="btn btn-secondary" data-dismiss="modal" >Cancel</button>
<button type="submit" class="btn btn-primary">Save changes</button>
</div>
这是我的脚本代码:
function validateInput() {
// some validation code
$.ajax({
url: "validate_credentials",
type: 'POST',
data: { data: document.getElementById('data') },
dataType: 'json', // added data type
success: function(res) {
if (res && valid) {
$("#bigerror").innerHTML = res;
return true;
} else {
return false;
}
}
});
我面临的问题是,URL 的操作首先完成了它的执行,因此即使表单无效,它也会提交。如何解决这个问题?
因为$.ajax
是异步的,你不能使用success函数的return值。
需要立即阻止默认提交,然后在success函数中调用submit()
此外,在 data:
选项中,您需要获取输入值,即输入元素本身。
function validateInput() {
// some validation code
$.ajax({
url: "validate_credentials",
type: 'POST',
data: {
data: $("#data").val()
},
dataType: 'json', // added data type
success: function(res) {
if (res && valid) {
$("#bigerror").innerHTML = res;
$("#edit-input").submit();
}
}
});
return false;
}
为了防止无限循环,因为 submit()
首先运行相同的验证函数,从表单中删除 onsubmit
,并将其移至提交按钮。
<button type="submit" class="btn btn-primary" onclick="return validateInput();">Save changes</button>
如果您想进行自定义异步验证,您应该阻止默认事件。
<form id="myForm" method="POST" action="editConf" id="edit-form">
将您的脚本修改为
$('#myForm').on('submit', validateInput)
function validateInput(event) {
event.preventDefault(); //Here we stoped defauld submit event
// some validation code
$.ajax({
url: "validate_credentials",
type: 'POST',
data: { data: document.getElementById('data') },
dataType: 'json', // added data type
success: function(res) {
if (res && valid) {
$("#bigerror").innerHTML = res;
return true;
} else {
return false;
}
}
});
现在不会提交表单。但是现在您必须考虑如何将表单数据发送到服务器。有多种变体。
1) 可以获取表单数据并发送ajax 模仿表单
2) 您可以在某处存储一个标志,标记您的表单有效,如果它有效,请不要停止从您的脚本提交表单,也不要停止事件。
我在 HTML 中有一个表单,我在其中使用 onsubmit 来验证输入和操作以在表单提交时调用 URL。这是我的 HTML 代码:
<form method="POST" onsubmit="return validateInput();" action="editConf" id="edit-form">
// HTML Form code
<div class="modal-footer">
<p id = "edit-footer" align="center"> </p>
<button type="reset" onClick="resetForm()" class="btn btn-secondary" data-dismiss="modal" >Cancel</button>
<button type="submit" class="btn btn-primary">Save changes</button>
</div>
这是我的脚本代码:
function validateInput() {
// some validation code
$.ajax({
url: "validate_credentials",
type: 'POST',
data: { data: document.getElementById('data') },
dataType: 'json', // added data type
success: function(res) {
if (res && valid) {
$("#bigerror").innerHTML = res;
return true;
} else {
return false;
}
}
});
我面临的问题是,URL 的操作首先完成了它的执行,因此即使表单无效,它也会提交。如何解决这个问题?
因为$.ajax
是异步的,你不能使用success函数的return值。
需要立即阻止默认提交,然后在success函数中调用submit()
此外,在 data:
选项中,您需要获取输入值,即输入元素本身。
function validateInput() {
// some validation code
$.ajax({
url: "validate_credentials",
type: 'POST',
data: {
data: $("#data").val()
},
dataType: 'json', // added data type
success: function(res) {
if (res && valid) {
$("#bigerror").innerHTML = res;
$("#edit-input").submit();
}
}
});
return false;
}
为了防止无限循环,因为 submit()
首先运行相同的验证函数,从表单中删除 onsubmit
,并将其移至提交按钮。
<button type="submit" class="btn btn-primary" onclick="return validateInput();">Save changes</button>
如果您想进行自定义异步验证,您应该阻止默认事件。
<form id="myForm" method="POST" action="editConf" id="edit-form">
将您的脚本修改为
$('#myForm').on('submit', validateInput)
function validateInput(event) {
event.preventDefault(); //Here we stoped defauld submit event
// some validation code
$.ajax({
url: "validate_credentials",
type: 'POST',
data: { data: document.getElementById('data') },
dataType: 'json', // added data type
success: function(res) {
if (res && valid) {
$("#bigerror").innerHTML = res;
return true;
} else {
return false;
}
}
});
现在不会提交表单。但是现在您必须考虑如何将表单数据发送到服务器。有多种变体。
1) 可以获取表单数据并发送ajax 模仿表单
2) 您可以在某处存储一个标志,标记您的表单有效,如果它有效,请不要停止从您的脚本提交表单,也不要停止事件。