【问题标题】:Different JavaScript behavior in Chrome and Firefox for form.submit()form.submit() 在 Chrome 和 Firefox 中不同的 JavaScript 行为
【发布时间】:2014-09-22 15:37:52
【问题描述】:

我的网站上有一段时间的 JavaScript sn-p。其目的是通过在提交表单后立即清除输入文件来防止双击提交。它曾经工作得很好。今天我测试了它,由于某种原因,Chrome 提交了一个空字符串作为文件,但 Firefox 先提交文件,然后再清除它,正如预期的那样。谁能向我解释这种行为?

$('#uploadform').submit(function (e) {
    if ($('#file').val().length == 0) {
        return false;
    }
    e.preventDefault();
    this.submit();
    $('#file').val('');
});

【问题讨论】:

  • 你的submit函数是什么样的?
  • Submit 可能是一个异步函数,这意味着它可能会在值被清除后执行。
  • @KeVin 这似乎是<form> 元素自己的submit function,因为代码是一个jQuery submit 处理程序(所以它只能附加到<form> 对象),所以jQuery 提供的this 对象必须是相同的<form> 对象。
  • 我假设在您清除该字段后,提交事件会在下一个滴答中处理。也许 Firefox 会在调用 submit 而 Chrome 不会收集这些值。通常通过简单地禁用提交按钮来防止重复提交。或者,尝试setTimeout(function() { $('#file').val(''); }, 0);

标签: javascript jquery google-chrome firefox forms


【解决方案1】:

您似乎遇到了一种竞争情况,即在清除值后提交表单。此行为可能因浏览器而异。考虑到您在没有 ajax 的情况下提交表单,一旦页面重新加载,表单将自动清除。为防止多次提交,您可以禁用提交按钮:

 $("#submit-button").attr("disabled","disabled");

【讨论】:

    猜你喜欢
    • 2014-09-01
    • 2018-02-16
    • 2014-10-24
    • 2020-04-16
    • 1970-01-01
    • 2016-02-09
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    相关资源
    最近更新 更多