javascript - 为什么可以提交这个表单? (火狐)

标签 javascript html forms firefox onsubmit

我在 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 的情况下提交它:

  1. 点击提交
  2. 确认警报对话框
  3. 再次点击提交
  4. 选中复选框以防止出现更多警报窗口并单击“确定”
  5. 点击提交 --> 表单将被提交

这是错误还是功能?在 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/

相关文章:

javascript - 检索在 Objection ORM 中的 $afterInsert Hook 中创建的模型的 ID

php - 使用 jQuery/javascript 从 HTML 中删除 id 属性

javascript - Vue.js + PHP 选择输入在提交时不保留

jquery - 使用 jquery 禁用输入类型 ="image"的正确方法是什么?

javascript - 使用 JQuery/Javascript 向表单动态添加值

javascript - 从 Mongoose 调用存储的 javascript 函数?

javascript - Angular 2 - 找不到服务 worker - 错误的 HTTP 响应代码 (404)

php - 正确的表单输入卫生

javascript - 如何使用 tsv 或 csv 从 txt 文件中获取数据以排列在 d3.js 中?

我的练习中出现 JavaScript 验证错误