【问题标题】:jQuery validator with Rails form still submitting on Heroku带有 Rails 表单的 jQuery 验证器仍在 Heroku 上提交
【发布时间】:2013-10-21 13:29:23
【问题描述】:

我有一个 Rails 注册表单,我正在使用jQuery validator 进行验证。它在 localhost 上运行良好,但在 Heroku 上运行时,它似乎运行验证但也立即提交表单,导致页面重新加载和 Rails 模型错误显示。我通过没有在字段中输入任何信息、点击提交和 jQuery 错误来确认这一点 - 但页面立即开始重新加载(提交)。

debug: true 添加到 validate() 调用中,这应该可以阻止表单提交并简单地显示错误(同样,在 localhost 上工作)仍然会导致表单在 Heroku 上提交。

我花了几个小时控制台日志,一点一点地评论,但没有结果。任何帮助或想法表示赞赏!

编辑:感谢@Sparky 指出必要性,添加更多特定于代码的代码:

我正在使用jQuery validate gemjQuery payment gem。我在 app/assets/javascripts 中有一个 JS 文件,我正在使用此页面特定的要求:

//= require jquery.payment
//= require jquery.validate
//= require jquery.validate.additional-methods

以及内容:

$(document).ready(function () {
  $('.form-signup').validate();
});

我的 application.js 有:

//= require jquery
//= require jquery_ujs
//= require log
//= require_self

注册页面是一个 HAML 设计表单:

= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => {:class => 'form form-signup control-group' }) do |f|
 = f.input :first_name, :autofocus => true, :placeholder => "First name", :label => false
 = f.input :last_name, :placeholder => "Last name", :label => false
 = f.input :email, :placeholder => "Email", :label => false, :required => true
 = f.input :password, :placeholder => "Password", :label => false, :input_html => { minlength: 6 }, :required => true
 = f.submit "Sign Up Now", :class => 'btn btn-success', :id => "signup-button"

没有错误记录到控制台。

这在本地工作,但在 Heroku 上显示 jQuery 验证但它仍然提交表单。

【问题讨论】:

  • 在浏览器中看一下控制台,控制台有没有错误?
  • 不,控制台没有任何错误。
  • 你什么都没给我们看...没有代码,没有标记,甚至没有错误消息。
  • @Sparky 没有错误消息。代码无关紧要——这发生在基本的 Rails 表单上,执行最少的操作以使 jQuery 验证工作:$('.form').validate();。考虑到它在本地设置上完美运行,我发现它可能与 Heroku 或它如何通过资产管道或其他东西进行部署有关。重申 jQuery validate does 完成了它的工作,但是由于某种原因,表单也会立即提交,导致 AR 验证。
  • 你所描述的是不可能的......这就是我要求查看代码的原因。如果它是“通过资产管道部署或其他东西”,则显示浏览器看到的相关代码。此外,没有代码,this is off-topic as per #2“有关您编写的代码问题的问题必须描述具体问题 - 并在问题本身中包含有效的代码来重现它。见@ 987654325@ 寻求指导。”

标签: jquery ruby-on-rails-3 heroku jquery-validate


【解决方案1】:

Jquery 验证在 JQuery 要求之后执行。

app/assets/application.js

//= require jquery
//= require jquery
//= require jquery_ujs
//= require jquery.validate
//= require jquery.validate.additional-methods
//= require_tree .

and 

We need to include like this

= javascript_include_tag "application", "rails.validations"

【讨论】:

  • OP 没有向我们展示任何内容,所以您的回答是基于什么?
  • 我的建议是,在 Heroku 生产中,它会将所有 js 文件编译成 aplication.js。我们在 application.js 中需要一些 js 文件,这些文件应该按顺序排列,否则会发生冲突。最好手动把那个js放到assets>javascript文件夹中。
猜你喜欢
  • 1970-01-01
  • 2013-02-09
  • 2019-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-10
相关资源
最近更新 更多