Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 无论模型中的验证器如何,表单有效性始终返回true_Jquery_Ruby On Rails_Forms_Validation_Paperclip - Fatal编程技术网

Jquery 无论模型中的验证器如何,表单有效性始终返回true

Jquery 无论模型中的验证器如何,表单有效性始终返回true,jquery,ruby-on-rails,forms,validation,paperclip,Jquery,Ruby On Rails,Forms,Validation,Paperclip,我正在使用jQuery隐藏并禁用提交按钮,直到表单通过回形针的验证\附件\文件\名称 只要点击表单,它就会立即显示该按钮,并且无论选择了哪个文件,它都会继续显示该按钮 我在表单上调用了.checkValidity(),发现它不断返回true。一次单击表单,另一次选择(任何)文件 Ruby模型: has_attached_file :file validates_attachment_file_name :file, matches: [/string\Z/] jQuery: $('#form'

我正在使用jQuery隐藏并禁用提交按钮,直到表单通过回形针的
验证\附件\文件\名称

只要点击表单,它就会立即显示该按钮,并且无论选择了哪个文件,它都会继续显示该按钮

我在表单上调用了
.checkValidity()
,发现它不断返回true。一次单击表单,另一次选择(任何)文件

Ruby模型:

has_attached_file :file
validates_attachment_file_name :file, matches: [/string\Z/]
jQuery:

$('#form').bind('change click', function() {
    if ($(this).valid()) {
      $('#submit').attr('disabled', false);
      $('#submit').show();
    } else {
      $('#submit').attr('disabled', true);
      $('#submit').hide();
    }
  });

我缺少什么?

你的ajax在哪里?

您正在调用
javascript
函数来验证
ruby

您应该知道,javascript是客户端的,ruby是服务器端的。JS只能读取((HTML))中逐字打印的内容

因此,您的JS是完全错误的:

 $('#form').bind('change click', function() { // on FORM change (not file input)
    if ($(this).valid()) { // if FORM valid
      $('#submit').attr('disabled', false); // enable submit
      $('#submit').show(); // show submit
    } else {
      $('#submit').attr('disabled', true); //disable submit
      $('#submit').hide();  //hide submit
    }
  });
上面是关于表格的。您需要处理表单的提交和回复。这里有一个很好的例子:(单击“登录”,提交并查看返回的数据)

解决问题的方法是使用“”将数据发送到服务器,获取响应并使用响应操作DOM

--

您最好这样做:

#app/assets/javascripts/application.js
$(document).on("submit", "#form", function(e){
   e.preventDefault();
   $(this).find("submit").attr('disabled', true);

   $.ajax({
      url: $(this).attr("action"),
      data: $(this).serialize(),
      success: function(data){
          // do something when successful
      },
      error: function(data) {
          // this is where validation errors will show
      }
   });
});
您必须使用适当的控制器操作对此进行备份:

#app/controllers/your_controller.rb
class YourController < ApplicationController
   def create
      @object = Object.new object_params
      @object.save
      # conditional response here
   end
end

$('#avatar').fileupload({

        url: '/profile/' + $(this).attr('data_id'),
        dataType: 'json',
        type: 'post',