javascript - 调用 preventDefault 后如何提交表单数据?
问题描述
我对如何控制表单中的提交事件有点困惑,我试图在这里找到一个简单的答案。
我想在将表单数据发送到表单操作脚本之前验证表单输入。我试图通过捕获提交事件、使用 Ajax 调用验证脚本来解决这个问题,如果验证成功,我希望调用实际的表单过程。但我不确定如何进行。简单地使用location.replace("action.php")
似乎失败了(我猜表单值没有发送)。
这是概念代码:
$("form").on("submit", function(event) {
event.preventDefault();
data = {
the_input_val: $("#input_to_be_validated").val()
};
$.post("ajax_validate_input.php", data, function(data, status) {
if (status == "success") {
if (data == "invalid") {
alert("Invalid input");
// Form data is not sent... as expected
} else {
// Here I want to send the form data. But the event.preventDefault() prevents it from happening
// What do I put here to call the form's 'action' script with form data?
}
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form action="action.php">
<input id="input_to_be_validated" name="my_input" type="text">
<button type="submit" name="submit">Submit</button>
</form>
解决方案
调用submit()
an 上的方法HTMLFormElement
手动提交表单,无需再次通过提交事件。
可以通过读出对象的target
属性来检索表单event
。
但是,要使这项工作正常进行,请丢失name="submit"
按钮上的值,因为这将导致尝试使用该方法提交时出错。
const $form = $("form");
$form.on("submit", function(event) {
event.preventDefault();
const data = {
the_input_val: $("#input_to_be_validated").val()
};
$.post("ajax_validate_input.php", data, function(data, status) {
if (status == "success") {
if (data == "invalid") {
alert("Invalid input");
// Form data is not sent... as expected
} else {
event.target.submit();
}
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form action="action.php">
<input id="input_to_be_validated" name="my_input" type="text">
<button type="submit">Submit</button>
</form>
推荐阅读
- ruby-on-rails - Ruby on Rails ActiveRecord 数据库查询优化 Postgres 数据库
- javascript - (节点:12308)警告:在循环依赖中访问模块导出的不存在属性“MongoError”
- obs - OBS API:是否可以使用他们的 API 创建包含某些源(如窗口捕获)的场景?
- r - 如何将计算的 % 添加到每个 col 并重命名 col
- python - 在 Python RQ 中执行等待/异步函数
- c# - 使 C# foreach 打印一次
- firebase - Vue 和 Firebase Auth REST Api Cors 问题
- c - 变量存在于流程的哪些逻辑段中?
- ruby-on-rails - Rails - 根据排序对项目进行排序并更改标题
- c# - 多个 Blazor 应用程序,相同的托管。从第一个应用程序重定向到第二个应用程序。Azure 应用服务