【发布时间】:2014-01-01 15:46:56
【问题描述】:
我找到了这个问题,但没有回答:Is there a jQuery event that I can monitor if form submission is cancelled?
所以如果用户提交一个表单,而它正在加载用户按下“esc”,或者点击浏览器的“停止”按钮,我想调用一个函数,有可能吗?
注意:我知道我们可以绑定“esc”按钮,但是如果用户通过浏览器的“停止/取消”按钮停止提交呢?
是否有 JavaScript 或 jquery 可能的解决方案?
编辑:
我知道我们可以通过 XHR (json/ajax) 帖子处理这个问题,但我正在寻找一个正常的表单提交。
我想要实现的只是:当用户按下“提交”按钮时,我想禁用提交按钮。如果用户在加载过程中取消/停止提交,提交按钮仍将被禁用(如果提交被取消/停止,则应重新启用)。
编辑/改写 - 2013 年 12 月 16 日:
我的问题类似这样:Is there a jQuery event that I can monitor if form submission is cancelled?
例如,我有这个表格:
<form method="post" enctype="multipart/form-data">
<input type="file" name="imginput" value=""/>
<input type="text" name="textinput" value=""/>
<input type="button" id="submitbtn" value="Submit"/>
</form>
问题场景如下:
新手用户填写表单,然后双击提交按钮。相同的表单值被插入服务器两次!
努力实现:
我想用$('#submitbtn').bind('click', function() { $(this).attr('disabled','disabled'); $(this).prop('disabled', true); });禁用点击提交按钮,这解决了问题,但产生了另一个问题:如果用户点击“esc”或在表单仍在提交时停止浏览器,提交按钮仍然是禁用并且用户不能再重新提交表单,我想在“提交过程”被取消后立即重新启用提交按钮。有没有办法做到这一点?类似:$(window).onStop(function() { ... });?或者一种方式来表明提交过程已被中断(或仍在运行)?
注意事项:
- 正在寻找客户端(javascript 或 jquery)解决方案。我知道可以通过服务器端检查相同条目轻松解决此问题,但我对服务器端解决方案不感兴趣。
- 可以通过 XHR (ajax/json) 绑定(如 onSuccess、onFailure 等)解决问题。但在这种情况下,我使用的是普通帖子,而不是 XHR,因此请从您的答案中排除 XHR。
- 解决方案必须至少解决 5 种主流浏览器(IE、FF、Chrome、Safari、Opera)的问题。
- 可能有人建议我们为“esc”按钮绑定“keypress”,所以当用户按下“esc”时,我们重新启用提交按钮。这很好,但这是半解决方案。如果用户通过浏览器的停止按钮停止了“提交过程”,有没有办法表明这个停止按钮被点击了?
【问题讨论】:
-
唯一可能的方法是在提交时设置超时,如果 X 毫秒后页面仍未卸载,则触发该函数。
-
我们在看什么样的交互?我们要取消提交数据到达服务器吗?我们要触发消息吗?也许在最后一次提交时将第二个 XHR 发送到调用 abort 的服务器?还是您只是想在传输尚未完成时捕获事件?
-
@hanzo2001 我已经编辑了问题并添加了一些额外的细节
-
好的,禁用和启用部分非常简单。取消的停止提交是我完全不理解的部分。用户
submits,但他可能还调用abort()?我认为这也可以做到……并且可以将事件链接在一起,使其具有连贯性。我做对了吗? -
@hanzo2001 正确,这就是我想要实现的目标
标签: javascript jquery event-handling