2017-08-03 30 views
1

目前我使用jQuery來處理這個問題,但它不是最佳的 - 我可以在它模仿的錯誤經常(Submit按鈕需要我點擊回場多次Rails的途徑表單驗證+沒有提交按鈕

$(document).ready(function(){ 
    validate(); 
    $('#required_field1, #required_field2, #required_field3, #required_field4, #required_field5, #required_field6').change(validate); 
}); 

function validate(){ 
    if ($('#required_field1').val().length > 0 && 
     $('#required_field2').val().length > 0 && 
     $('#required_field3').val().length > 0 && 
     $('#required_field4').val().length > 0 && 
     $('#required_field5').val().length > 0 
     ){ 
     $("input[type=submit]").prop("disabled", false); 
    } 
    else { 
     $("input[type=submit]").prop("disabled", true); 
    } 
} 

雖然我理解數據綁定的概念對它不友好,但我想知道在Rails中是否有更好的方法來實現這一點?

目前沒有它,您可以提交一個空白頁面,並立即得到一個錯誤,這是比這更糟糕的經驗

感謝任何反饋。

Rails的5 + Bootstrap3(這不是問題這一點。)

+0

如果字段是表的列,那麼爲什麼不使用像驗證軌道方式:'驗證:required_field1,存在:TRUE' ... – Abhi

+0

@Abhi這基本上是我在問什麼 - 這是否獲得傳入提交按鈕?還是你在模型中談論? – DNorthrup

+0

是的,如果你提到的字段是數據庫列,那麼你必須讓rails處理驗證[Rails驗證](http://guides.rubyonrails.org/active_record_validations.html) – Abhi

回答

0

我會用jQuery's serializeArray

如:

var params = jQuery("#form_id").serializeArray(); 

//This should give you form params like: 
// [ 
// {name: "obj[required_field1]", value: ""}, 
// {name: "obj[required_field2]", value: ""}, 
// . 
// . 
// . 
// ] 

jQuery.each(params, function(i, v) { 
    if(v["value"].length > 0) { 
    jQuery("input[type=submit]").prop("disabled", false); 
    } else { 
    jQuery("input[type=submit]").prop("disabled", true); 
    } 
}); 

注:這只是做出了榜樣你理解這個概念(因爲我沒有HTML/Rails模板)。

編輯

把這個邏輯來改變每個文本字段的事件。

jQuery("#required_field1, #required_field2, ...").change(function() { 
    // Above code goes here 
});