用于表单验证的Rails方式+无提交按钮

时间:2017-08-03 12:40:30

标签: javascript jquery ruby-on-rails forms

目前我正在使用jQuery来处理这个问题,但它并不是最优的 - 我可以经常模拟其中的错误(提交按钮要求我多次点回字段。

$(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中是否有更好的方法可以做到这一点?

目前没有它你可以提交一个空白页面,并立即收到错误,这比这更糟糕。

感谢任何反馈。

Rails 5 + Bootstrap3(这并不重要。)

1 个答案:

答案 0 :(得分: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
});