Jquery 无论模型中的验证器如何,表单有效性始终返回true
我正在使用jQuery隐藏并禁用提交按钮,直到表单通过回形针的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'
验证\附件\文件\名称
只要点击表单,它就会立即显示该按钮,并且无论选择了哪个文件,它都会继续显示该按钮
我在表单上调用了.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',