使用 Javascript 检测已取消的表单帖子

Posted

技术标签:

【中文标题】使用 Javascript 检测已取消的表单帖子【英文标题】:Detect cancelled form post with Javascript 【发布时间】:2014-09-17 13:13:27 【问题描述】:

我正在开发一个包含大量抽象的 Web 项目 - 大量代码隐藏在视图模板、公司内部 javascript 库等中。

我被要求“劫持”表单提交按钮以在提交表单时禁用它们,以禁止额外的点击。问题是,我仍然需要提交按钮,因为它在我们系统的 99% 中用作表单输入(不是最佳实践,但我没有编写该代码!)

我所做的是当用户单击“保存”时,该按钮使用 jQuery 隐藏,并且使用微调器图标禁用的完全相同的副本被放置在其位置:

function showSpinningButton(button)
    $(button).hide();

    clone = $(button).clone();

    clone.prop('disabled', true);

    $(button).parent().append(clone);
    clone.show();

这适用于标准用例,但小众案例是验证 - 我无法检测表单何时无效并且按钮需要重置为标准。这尤其麻烦,因为所有验证都是在我不允许修改的面向外部的 Javascript 库中完成的。

要点是:当已提交的表单被取消(即 onclick="return false;")时,是否会触发一个 DOM 事件,我可以附加一个处理程序来重置按钮?

【问题讨论】:

html5验证可以随时检查。如果您使用的是基于 js 的验证,那就是狂野西部,但除了 onsubmit 之外,可能还有其他方法可以运行验证;检查验证库文档。也就是说,您可能只是隐藏按钮 onsubmit 而不是像那样交换它。 【参考方案1】:

您可以在验证函数上使用包装器:

var oldHandler = form.prop("onsubmit");
form.removeProp("onsubmit").submit(function(e) 
  var result = oldHandler.call(this, e);
  if (result == false) 
    // reset your button
  
  return result;
);

【讨论】:

以上是关于使用 Javascript 检测已取消的表单帖子的主要内容,如果未能解决你的问题,请参考以下文章

jquery ajax 帖子已取消

Xamarin 表单选择器确定或取消按钮按下检测

表单全选及取消全选

使用纯javascript检测更改的输入文本框[重复]

取消选中按钮按下复选框而不重置表单

php 联系表单7插件:在使用Contact Form 7短代码的页面,帖子和CPT上加载Javascript和CSS。