如果未定义“onsubmit”中的函数,则无论如何都会执行POST请求?

时间:2016-05-23 07:12:07

标签: javascript html post request pug

我有这个表格(用JADE编写):

form(onsubmit="return validateForm();" action = '/do/something', method = 'post'
....
  div
    button(type='submit')= t('myButtons.submit')

当我在页面完全加载之前按下提交按钮时,我收到错误消息:

  

未捕获的ReferenceError:未定义validateForm

这对IMO来说很有意义。但是,为什么要发布帖子请求呢?

我试过这个

form(onsubmit="return validateForm() || false;" action = '/do/something', method = 'post'

我也试过这个:

form(onsubmit="return validateForm || false;" action = '/do/something', method = 'post'

我还尝试将validateForm放在$(document).ready(function(){}内,并将其放在$(document).ready(function(){}之前。

但结果是一样的。 POST请求被执行。只有在页面完全加载时,表单才能正常工作。

1 个答案:

答案 0 :(得分:0)

  

但是如何执行帖子请求呢?

当您提交表单时,除非有什么阻止,否则将提交表单。

如果您为响应提交事件而运行的JavaScript会引发异常,那么它不会阻止表单提交。

因此,它提交。

return validateForm() || false;

我认为您正在尝试测试此处是否定义validateForm,如果不是,则使用false

但是,您实际上正在测试调用validatorForm返回值是否为真。如果未定义该函数,则会出现异常并且脚本将中止。

要做到这一点,你需要更多的东西:

if (typeof validateForm !== "undefined") {
    return validateForm();
} else {
    return false;
}

...但是我看不出有什么情况会导致你有条件地定义你的validateForm函数......如果没有定义那么你的表单简单(并且默默地)什么也不做就是可怕的失败状态。

  

我还尝试将validateForm放在$(document).ready(function(){}

阻止函数成为全局函数,并确保它不会在onsubmit=内部事件属性的范围内定义。

  

以及$(document).ready(function(){}。

之前

定义函数的位置无关紧要;只要你这样做,它就是一个全球性的。

(或者,如果您切换到使用JavaScript绑定事件处理程序的现代做法,只要它适用于您对addEventListener的调用的范围。)