2016-09-30 103 views
0

我試圖在提交表單前禁用所有具有樣式display:none的元素。JQuery提交 - 無限循環

如果有e.preventDefault(),表格根本沒有提交,如果沒有e.preventDefault()發生無限循環。

$(document).on('submit', 'form', function (e) { 
    e.preventDefault(); 
    console.log($(':input:hidden').length); 
    $('#reservation-form > :input:hidden').attr("disabled", true); 
    $('#reservation-form').unbind('submit').submit(); 

}); 

你知道怎樣做才能使提交此表格前停用所有display:none領域?

+1

你的問題是,事件沒有綁定到'#reservation-form',因爲你已經將它委託給'document' –

+0

我認爲這是因爲你的監聽器位於'$(document)'而不是' #預約form'。 –

+0

預先捕獲您的下一個問題的可能性:*禁用的元素不包含在表單提交*中。 (可以這就是你想要的)。 –

回答

2

你不必跑$('#reservation-form').unbind('submit').submit();

取出e.preventDefault();呼叫,並在函數結束時返回true:

$(document).on('submit', 'form', function (e) { 
    console.log($(':input:hidden').length); 
    $('#reservation-form > :input:hidden').attr("disabled", true); 
    return true; 
}); 

這應該給你你想要的行爲,而不必綁定和解除綁定事件。

+0

等一下,這很有道理!......但是'return true;'語句在這裏是沒用的 –

+0

我喜歡添加它,據我回憶,返回false將阻止表單提交,所以我寧願明確地返回true。 –

+0

剛剛測試過,確認並返回false可以防止表單提交(在提交前進行驗證時非常有用) –

2

要綁定事件document水平,因此取消綁定submit,你應該在document水平拆散它。

這是說,最簡單的方法是改爲調用DOM本地submit()事件:

$('#reservation-form')[0].submit(); 

順便說一句,對於布爾屬性,更好的方法是使用.prop()即使在你的情況下,改變什麼:

$('#reservation-form > :input:hidden').prop("disabled", true); 
+0

現在提交,但恐怕這是行不通的。即使有道具,目前顯示的字段:無風格。我希望所有具有display:none樣式的元素都不要發送或至少爲空。 –

+0

也許你應該使用選擇器:'$('#reservation-form:input:hidden')' –

0

您正在使用錯誤的選擇器來隱藏輸入類型的元素。 您應該使用:

$('input[type=hidden]') 

文檔:Css Selectors

+0

':hidden'是一個jQuery選擇器:https://api.jquery.com/hidden-selector/ –

+0

哦我的不好,我只使用標準的CSS選擇器,謝謝指出,我應該刪除答案? – SuigetsuSake