evi*_*iko 10 javascript jquery event-handling
我发现了这个问题,但没有回答:是否有一个jQuery事件我可以监控表单提交是否被取消?
因此,如果用户提交表单,当它加载用户按下"esc",或点击浏览器的"停止"按钮时,我想调用一个函数,是否可能?
注意:我知道我们可以绑定"esc"按钮,但是如果用户通过浏览器的"停止/取消"按钮停止提交呢?
是否有JavaScript或jquery可能的解决方案?
编辑:
我知道我们可以用XHR(json/ajax)帖子处理这个问题,但我正在寻找一个正常的表单提交.
我想要实现的就是:当用户按下"提交"按钮时,我想禁用提交按钮.如果用户在加载时取消/停止提交,则仍将禁用提交按钮(如果提交被取消/停止,则应重新启用).
编辑/改编 - 2013年12月16日:
我的问题与此类似:是否有一个jQuery事件,我可以监视表单提交是否被取消?
例如,我有这样的形式:
<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>
Run Code Online (Sandbox Code Playgroud)
这是问题场景:
新手用户填写表单,然后双击提交按钮.将相同的表单值插入服务器两次!
试图实现:
我想在点击时禁用提交按钮$('#submitbtn').bind('click', function() { $(this).attr('disabled','disabled'); $(this).prop('disabled', true); });,这解决了问题,但又产生了另一个问题:如果用户在表单仍在提交时单击"esc"或停止浏览器,则仍会禁用提交按钮,用户无法重新启动 - 再次提交表单,我想在"提交过程"取消后立即重新启用提交按钮.有没有办法实现这个目标?像这样的东西:$(window).onStop(function() { ... });?或表明提交过程已被中断(或仍在运行)的方式?
笔记:
最后,这个问题实际上打破了复杂的问题,因此可以按部分解决.首先,让我们把大象赶出房间:
我实际上看了一会儿,却找不到怎么做,但也许有人可以提供答案并启发我们两个.现在,让我们把第二只大象赶出房间.
事实上,我们能够在处理某些请求时执行所谓的异步操作(就像"Ajax"中的第一个"A").让我们看看第3只大象
当然,禁用按钮是这种困境中最简单的解决方案.我们捕获提交,放入一行以禁用该表单中的任何进一步提交事件.完成.愿下一头大象进来吗?
问题是,如果服务器已经有完整的标头并且正在处理请求,则用户不知道(并且他确定不应该知道).服务器可以监听客户端是否中止但是......
现在你的问题有很多大漏洞,因为你不希望你的请求是异步的,而且没有办法browser.onStop可靠地倾听.
以不同的方式思考
你害怕不一致.解决方案:在第一个之后禁用提交事件
您的用户愚蠢/缺乏经验.解决方案:大红色标签Warning: do not press the stop button during the process, or navigate away from the page until the request has completed.
您的用户很担心.解决方案:添加一个警告You may edit your post/info in another page once the request has completed. (some instructions to find the edit page)
您的服务器(或连接速度慢)需要很长时间才能完成,用户可能会感到不耐烦.解决方案:在触发提交之前设置超时事件...... 但是等等!请求是同步的,这意味着在完成之前别无他法.Dear User: this process may take a while. If after X mins you have not been redirected to this/page.html please... (do something/more instructions)
如果您想要更高级别的交互性,请接受所有这些建议并开始使用Ajax,教育您的用户尝试中止请求的危险,并为他们提供后续编辑选项.
请关注其他服务的示例.许多公司在付款程序中非常强烈地警告,直到流程结束并添加一些说明,以防出现问题并且用户担心.
考虑为交互性添加限制,某些流程并不意味着是交互式的(付款,唯一条目...)
如果您担心用户会将自己搁置在已停用的表单上,请向他添加一些信息. If you tried to stop the procedure please follow this link to see if it was processed, if it wasn't you will be redirected to this form again (you may want to save the users form data so he doesn't have to start over)