我有这个表格(用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请求被执行。只有在页面完全加载时,表单才能正常工作。
答案 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
的调用的范围。)