不使用任何JS庫,是否可以暫停表單提交,運行一些代碼,然後重新啓動?Javascript - 你可以暫停表單提交,然後重新啓動
我想問的原因是我目前有一種表單,它在提交運行代碼時向我的分析提供程序發送請求。在Chrome/IE中運行良好,但在FF和Safari中,這些60%的分析數據已經退出。
感覺是提交在腳本執行之前經過,因此我們試圖暫停提交事件。
興趣聽取提前
不使用任何JS庫,是否可以暫停表單提交,運行一些代碼,然後重新啓動?Javascript - 你可以暫停表單提交,然後重新啓動
我想問的原因是我目前有一種表單,它在提交運行代碼時向我的分析提供程序發送請求。在Chrome/IE中運行良好,但在FF和Safari中,這些60%的分析數據已經退出。
感覺是提交在腳本執行之前經過,因此我們試圖暫停提交事件。
興趣聽取提前
你可以聽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"
運行,如果要取消表單提交從事件處理程序返回一個錯誤,或者低於使用:
你可以使用submit
事件取消表單提交,執行您的分析ajax內容,然後使用form
元素上的submit
方法以編程方式提交表單。
例如(live copy):
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操作,但原則是一樣的。
題外話:我使用設置事件處理程序有(form.onsubmit = ...
)的老DOM0風格。我不推薦它,但它保持簡單的例子。設置事件處理程序就是像jQuery,Prototype,YUI,Closure,或any of several others庫可以平滑過度瀏覽器的差異(和提供額外的功能)的地方爲你的產品,這是值得用一個考慮。
只是放置一個按鈕,在地方運行分析腳本作爲一個函數的提交按鈕,然後提交表格
document.forms["myform"].submit();
請參閱本網站How to submit a form through javascript。
希望有所幫助。
提交要麼完全成功要麼完全失敗。這是一個到web服務器的POST,如果它沒有完全到達,服務器(至少對於Apache和IIS)將不會處理它。你能解釋一下這個問題更清楚嗎? – CodeCaster