2016-07-06 94 views
0

我有這個jQuery函數注入每個頁面,以便在點擊後禁用提交按鈕。Javascript返回false;沒有取消表單提交另一個。提交jQuery調用

$('form').submit(function() { 
     var btn = $('input[type=submit]', this); 
     disableButtonOrLink.disableSubmit(btn); 

     btn = $('button[type=submit]', this); 
     disableButtonOrLink.disableSubmit(btn); 
    }); 

的問題是,我也有,有時附着於形式的東西形狀像這樣

<form action="someAction" method="post" name="someForm" class="form" 
    onsubmit="var invalid=false; 
    invalid=someAction(); 
    if(invalid){return false;}" 
    id="someForm"> 

我有這是問題出現了一些後端驗證的是, ('form')。提交動作總是在返回false後被調用。由於返回錯誤,表單實際上並未提交;然而這個jQuery函數仍然在被調用之後。無論如何阻止這個.submit被稱爲?

只是爲了澄清到底發生了什麼: 形式對onsubmit被調用;

返回虛假部分正在被擊中並正確取消提交;

的(「形式」)。遞交仍然被稱爲的onsubmit完成後,就好像表單提交併沒有取消,並禁止按鈕。

我想阻止發生最後一步。

回答

0

您可以使用jQuery裏面找form這些按鈕從防止東西,他們通常做用的方法。
例子:
$("form button").on('click', function(e){ e.preventDefault(); });

+0

究竟做了preventDefault()方法做/停止的發生??? – mcgray

+0

在我的例子中,它獲取了'form'中的每個'button'元素。 e.preventDefault()停止默認的動作,例如表單中的按鈕,它不會發送它。 #Edit - 實際上,它會更清楚,如果我會趕上'input'型submit'的' - 在這種情況下,默認操作提交表單 – Krizzu

+0

是否有在的onsubmit部分使用.preventDefault()的方式如果它是用html寫的? I.E.的onsubmit =「something.preventDefault()」作爲this.preventDefault()似乎並不奏效 – mcgray

0

我可能會嘗試這樣

$('#someForm').on('submit', function(e) { 
    if ($(this).data('some-action')) { 
     e.preventDefault(); 
     return false; 
    } 
    //... then disable buttons, etc 
}); 

在這種情況下,你需要的屬性data-some-action添加到形式,無論後端驗證你正在做的事情進行評估。

UPDATE

$('#someForm').on('submit', function(e) { 
    if ($(this).data('some-action') == 'error-message') { 
     e.preventDefault(); 
     alert('error!'); 
     return false; 
    } 
    if ($(this).data('some-action') == 'reload') { 
     e.preventDefault(); 
     document.location.reload(true); 
    } 
    //... then disable buttons, etc 
}); 
+0

所以基本上設置窗體上的屬性在返回false之前;這表明它是否有效,然後可以在提交jQuery中評估它,以確定它是否應該禁用按鈕。 – mcgray

+0

上面的代碼我相信你可以跳過整個'onsubmit =「var invalid = false; invalid = someAction(); if(invalid){return false;}」'只是刪除它。添加,而不是'data-some-action =「」'根據您是否要提交表單評估真或假 –

+0

我有點像這個想法,但行爲改變頁面到頁面如何處理無效提交(任何地方從渲染錯誤信息到重新渲染整個頁面)。不幸的是,這個解決方案不會讓我保持每個驗證動作的獨特性。 – mcgray