2013-03-12 85 views
1

我有一個隱藏提交按鈕和一個文本輸入的表單。 在文本輸入中,使用jQuery附加了一個提交表單的更改事件。 事情是,如果我輸入輸入,然後表單提交兩次。 我認爲是因爲輸入提交表單和輸入檢測到一個更改事件,它再次提交表單。 我有兩個問題: - 我的想法是對的嗎? - 我該如何解決這個問題?防止提交表單兩次更改事件

這是JavaScript:

$("input.price").live('change', function() { 
    $(this).closest('form').submit(); 
}); 

編輯:我認爲e.preventDefault()阻止事件「改變」的默認,但沒有防止事件「提交」 ..我試試這個之前出現的「變化」,沒有運氣,但也許我接近的解決方案:

$("input.price").live('submit', function (e) { 
     e.preventDefault(); 
}); 

回答

0

最後我想出了一個解決方案! 事情就是這樣..正如Mike C.所說,額外的代碼可以幫助解決問題。 問題是,我試圖提交它的MVC的Ajax.BeginForm的形式,所以..主要問題是該表單的ajax提交,這是第二次提交!

我無法改變這種行爲..只改變Ajax.Beginform與Html.Beginform ..我不想做的事情。 所以..我想出了這個「生鏽」的解決方案:

$("input.price").live('keypress', function (e) { 
    if (e.keyCode == 13) { 
     $(this).attr('data-submitting', true); 
    } 
}); 

$("input.price").live('change', function (e) { 
    if (!$(this).attr('data-submitting')) { 
     $(this).closest('form').submit(); 
    } 
}); 
1
$("input.price").live('change', function (eventObject) { 
    eventObject.preventDefault(); 
    $(this).closest('form').find('input.submitButton').click(); 
}); 
1

您需要使用preventDefault()功能,防止形式從提交。

E.g.

$("input.price").live('change', function (e) { 
    e.preventDefault(); 
    $(this).closest('form').find('input.submitButton').click(); 
}); 
+0

這並不工作..形式不斷提交兩次:/ – 2013-03-12 20:56:16

1

我在這裏缺少什麼,你爲什麼不這樣做,而不是:

$("input.price").live('change', function (eventObject) { 
    $(this).closest('form').submit(); 
}); 
+0

謝謝,我只是改變它。 (但問題仍然存在) – 2013-03-12 20:59:42

+0

如果您使用我展示的方法提交表單,您是否可以刪除隱藏的提交按鈕? – 2013-03-12 21:02:20

+0

是的邁克,我刪除了按鈕。但雙提交持續 – 2013-03-13 15:16:25