2011-09-20 84 views
2

我有以下代碼,我用它來提交鏈接(而不是按鈕)的表單。這是爲了讓我們可以做一些CSS懸停的東西。Jquery - Internet Explorer提交表單兩次

$('a.css_submit').click(submit_form); 
$('a.inactive_submit').click(submit_form); 

function submit_form(event) { 
    if ($(this).parents('form:first').length > 0 && !$(this).hasClass('inactive_submit')) { 
     $(this).toggleClass("css_submit inactive_submit"); 
    $(this).parents('form:first').submit(); 
    return false; 
    } else { 
    return true; 
    } 
} 

問題是Internet Explorer偶爾會提交表單兩次。我自己無法複製該問題,但可以在生產服務器日誌中驗證它。這個問題在IE6 - IE9中仍然存在。所有其他瀏覽器正常工作。我看到一些帖子說,從鏈接返回false,但我這樣做。

任何幫助表示讚賞。

+2

也許用戶點擊提交兩次真的很快。嘗試在第一次點擊後禁用鏈接。 –

+0

如果使用event.preventDefault()作爲submit_form的第一行,它會執行相同的操作嗎? (而不是返回false;) –

+0

+1 @ilia往往是這樣。普通人羣用於雙擊Windows圖標,因此他們傾向於雙擊_everything_。我幾年前編寫了一個在線支付系統,爲了防止雙重提交,我們禁用了onclick提交按鈕(除了服務器端驗證)。 –

回答

0

你可以添加一些額外的驗證,以確保它不會被點擊了兩次:

var formSubmitted = false; 

function submit_form(event) { 
    if(formSubmitted == true) { alert('Form already submitted.'); return false; } // determine if form is already submitted 
    if ($(this).parents('form:first').length > 0 && !$(this).hasClass('inactive_submit')) { 
     $(this).toggleClass("css_submit inactive_submit"); 
    $(this).parents('form:first').submit(); 
    return false; 
    } else { 
    formSubmitted = true; 
    $('a.css_submit').attr('disabled', true); // disable form submit button 
    $('a.css_submit').val('Processing...'); // set form submit button text to say processing 
    return true; 
    } 
} 
1

當你submit自己需要的形式也取消事件的默認處理。

jQuery的方法是event.preventDefault()

$(this).parents('form:first').submit(); 
event.preventDefault(); 

返回true/false擁有jQuery中沒有任何影響。