您可以暂停表单提交然后重新启动吗?
Can you pause a form submission and then restart
不使用任何JS库,是否有可能暂停表单提交,运行一些代码,然后重新启动它?
我问的原因是,我目前有一个表单,当它提交运行代码发送请求给我的分析提供程序。在Chrome/IE中工作良好,但在Firefox和Safari中,这些分析有60%的下降。
给人的感觉是,在脚本执行之前,提交就已经完成了,这就是为什么我们要暂停提交事件。
有兴趣听听你的想法或见解
您可以使用submit
事件来取消表单提交,做您的分析ajax的东西,然后使用form
元素上的submit
方法以编程方式提交表单。
例如(活拷贝):
HTML:<form id="theForm" action="#" method="GET">
<label>Field: <input type="text" name="theField"></label>
<br><input type="submit" value="Submit">
</form>
JavaScript: window.onload = function() {
var form, counter;
form = document.getElementById("theForm");
form.onsubmit = function() {
if (typeof counter === "undefined") {
display("Starting count down (" + counter + ")");
counter = 3;
setTimeout(delayedSubmit, 1000);
}
display("Cancelling form submit");
return false;
};
function delayedSubmit() {
if (typeof counter === "number") {
--counter;
if (counter > 0) {
display("Continuing count down (" + counter + ")");
setTimeout(delayedSubmit, 1000);
}
else {
display("Count down complete, submitting form");
counter = undefined;
form.submit();
}
}
}
function display(msg) {
var p = document.createElement('p');
p.innerHTML = msg;
document.body.appendChild(p);
}
};
这里我使用了一个倒计时定时器而不是ajax操作,但原理是一样的。
离题:我使用了旧的DOM0风格在那里设置一个事件处理程序(form.onsubmit = ...
)。我不推荐这样做,但这样可以使示例保持简单。设置事件处理程序是像jQuery、Prototype、YUI、Closure或其他几个库可以为您消除浏览器差异(并提供附加功能)的地方之一,因此非常值得考虑使用一个。
在提交按钮的位置放置一个按钮,该按钮将运行分析脚本作为一个函数,然后使用
提交表单document.forms["myform"].submit();
查看这个网站如何通过javascript提交表单。
可以监听submit
事件。比如:
(function() {
var processed = false;
form.onsubmit = function(event) {
event = event || window.event;
if(!processed) {
if(event.preventDefault) { // cancel default action
event.preventDefault();
}
else {
event.returnValue = false;
}
// run your code
// execute the next two lines in a callback if necessary
processed = true;
form.submit();
}
};
}());
您需要附加该函数以在事件"onsubmit"
上运行,如果您想取消表单提交,则从事件处理程序返回false,或者使用以下方法:
function onSubmitHandler(evnt){
//run some code set some flag
if(flag is set) evnt.preventDefault(); else return true;
}
相关文章:
- 当我在重新启动cordova应用程序后尝试添加更多数据时,lokijs会丢失数据库和收集中的数据
- 重新启动jquery脚本后,角度停止工作
- Chrome内容脚本制作cookie;chrome重新启动时,cookie会被删除.如何使其稳定
- preventDefault之后的重新启动事件
- WebStorm,使用Node Supervisor(因此不必在每次代码更改后重新启动)
- 重新启动游戏jQuery功能不工作
- Web服务器意外退出,正在重新启动新实例
- 在变量中保存值的最佳方法是在应用程序关闭后使用,然后使用apachecordova在android中重新启动
- 重新启动画布 JavaScript
- 事件侦听器,用于完全关闭后重新启动的应用程序
- Node SocketIO以编程方式强制在损坏的套接字上重新启动
- 服务器重新启动后javascript不工作
- 当滚动到指定的位置时,启动功能,如何重置它并重新启动,如果我们再次回到这个位置
- Gulp Concat+Browsesync重新启动
- 在 javaScript 中重新启动 setInterval
- 如何为Sails.js创建启动/停止/重新启动Linux服务
- 在满足某个条件时停止函数,然后在其他条件时重新启动它
- 在正文模糊上暂停幻灯片放映,然后再次重新启动
- PHP脚本重新运行自己,直到进程完成.然后每周重新启动
- 您可以暂停表单提交然后重新启动吗?