我在 Firefox(版本 38.05)中遇到一个非常奇怪的错误。我有一个如下所示的表单,以及一段用于验证的 Javascript
<form action='#' onsubmit='return check()'>
<input type='text' name='asdf'/>
<input type='submit' name='jkl' value='Submit'/>
</form>
Javascript
function check(){
alert("asdf");
return false;
}
现在永远不应该提交此表单。但在 Firefox 中,如果您遵循以下过程,则可以在不禁用 Javascript 的情况下提交它:
- 点击提交
- 确认警报对话框
- 再次点击提交
- 选中复选框以防止出现更多警报窗口并单击“确定”
- 点击提交 --> 表单将被提交
这是错误还是功能?在 Chrome 中一切正常。如果这种行为是有意的,我该如何避免?
最佳答案
那么当 alert()
在被用户阻止的情况下被调用时,Firefox 和 Chrome 会有不同的行为!
虽然 Chrome 只是默默地失败,但当它被用户阻止时尝试在 Firefox 中提醒
抛出异常。并且 onSubmit
处理程序仅在函数显式返回 false 时才被阻止。
一个有点脏的修复是:
function check() {
try {
alert('foo');
}
catch {
//User prevented alerts, fallback
showSomehow('foo'); //use a log, a div on the top of the page, ...
}
return false;
}
需要比我更有动力并深入研究规范才能知道谁是对的。
关于javascript - 为什么可以提交这个表单? (火狐),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31134361/