防止表单提交,并稍后在异步提交jQuery函数中手动提交

时间:2019-06-17 13:21:13

标签: javascript

这是我要实现的目标的基本版本。

由于我在函数中有一些等待,所以我使用private readonly Mock<IHttpClientFactory> _mockHttpClientFactory; private readonly Mock<HttpClient> _mockHttpClient; [Fact] public void TestMethod_ValidHttpRequest_ReturnsTrue() { var httpClient = _mockHttpClient.Setup(x => x.SendAsync(It.IsAny<HttpRequestMessage>())) .ReturnsAsync(new HttpResponseMessage() { StatusCode = HttpStatusCode.OK, Content = new StringContent("[{'id':1,'value':'1'}]"), }); var client = _mockHttpClientFactory.Setup(x => x.CreateClient()).Returns(httpClient); //DOESNT WORK var service = new TestService(_mockHttpClientFactory); var result = service.TestMethod("testdata"); Assert.True(result.Result) }

async

但是表格最后提交。 我什至尝试添加e.preventDefault(),但这也不起作用。 都是因为$(document).on('submit', '.applicationForm', async function(e) { do some validation if (!valid) { return true; } return false; }); 位吗?

2 个答案:

答案 0 :(得分:1)

标记为async的功能始终返回Promise,因此不会返回false

他们还立即返回,因此e.preventDefault将因为执行得太晚而无法正常工作。


您不能等到异步代码运行后再取消事件。

相反:

  • 不要使用async函数
  • 总是e.preventDefault
  • 如果验证通过,请重新开始提交(使用the_form.submit()

在用户与表单交互时进行验证。将标记设置为有效或无效。单击提交按钮后,检查标志的状态。

答案 1 :(得分:0)

一个异步函数将自动返回一个Promise,并且由于解析为false的Promise与false是不同的,因此该表单将提交-仅在false正好返回将不提交表单。

始终返回false,如果通过验证,则手动提交表单:

$(document).on('submit', '.applicationForm', function(e) {
  checkValidity(this);
  return false;
});
async function checkValidity(form) {
  // do some validation
  if (valid) {
    $(this).submit();
  }
}