2011-09-07 92 views
2

不使用任何JS庫,是否可以暫停表單提交,運行一些代碼,然後重新啓動?Javascript - 你可以暫停表單提交,然後重新啓動

我想問的原因是我目前有一種表單,它在提交運行代碼時向我的分析提供程序發送請求。在Chrome/IE中運行良好,但在FF和Safari中,這些60%的分析數據已經退出。

感覺是提交在腳本執行之前經過,因此我們試圖暫停提交事件。

興趣聽取提前

+0

提交要麼完全成功要麼完全失敗。這是一個到web服務器的POST,如果它沒有完全到達,服務器(至少對於Apache和IIS)將不會處理它。你能解釋一下這個問題更清楚嗎? – CodeCaster

回答

0

你可以聽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(); 
     } 
    }; 
}()); 
0

您需要附加的功能,事件"onsubmit"運行,如果要取消表單提交從事件處理程序返回一個錯誤,或者低於使用:

3

你可以使用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風格。我不推薦它,但它保持簡單的例子。設置事件處理程序就是像jQueryPrototypeYUIClosure,或any of several others庫可以平滑過度瀏覽器的差異(和提供額外的功能)的地方爲你的產品,這是值得用一個考慮。

1

只是放置一個按鈕,在地方運行分析腳本作爲一個函數的提交按鈕,然後提交表格

document.forms["myform"].submit(); 

請參閱本網站How to submit a form through javascript
希望有所幫助。

相關問題