一尘不染

出现错误“由于未连接表单而取消了表单提交”

javascript

我有一个使用JQuery 1.7的旧网站,该网站在两天前都可以正常工作。突然我的某些按钮不再起作用,单击它们后,我在控制台中收到以下警告:

由于未连接表单,因此取消了表单提交

点击后的代码是这样的:

 this.handleExcelExporter = function(href, cols) {
   var form = $('<form method="post"><input type="submit" /><input type="hidden" name="layout" /></form>').attr('action', href);
   $('input[name="layout"]', form).val(JSON.stringify(cols));
   $('input[type="submit"]', form).click();
 }

Chrome 56似乎不再支持这种代码。是不是 如果是,我的问题是:

  1. 为什么这突然发生了?没有任何弃用警告?
  2. 此代码的解决方法是什么?
  3. 有没有一种方法可以强制chrome(或其他浏览器)像以前一样工作而不更改任何代码?

PS 在最新的firefox版本中也不起作用(没有任何消息)。另外,它在IE 11.0和Edge中也不起作用!(都没有任何消息)


阅读 414

收藏
2020-05-01

共1个答案

一尘不染

快速解答:将表格附加到正文中。

document.body.appendChild(form);

或者,如果您如上所述使用jQuery: $(document.body).append(form);

详细信息:根据HTML标准,如果表单未与浏览上下文(文档)相关联,则表单提交将被中止。

在Chrome 56中,应用了此规范。

PS关于您的问题#1。在我看来,与ajax不同,表单提交会导致页面立即移动。因此,显示“已过时的警告消息”几乎是不可能的。 我也认为,功能更改列表中未包含此重大更改是不可接受的。

2020-05-01