javascript - Rails 4.1.6 form_for Coffeescript 在多个 View 上不起作用

标签 javascript ruby-on-rails coffeescript submit form-for

我可以让我的 CoffeeScript 错误消息显示在一个 View 中 (/users/new.html.erb):

<h1> Sign up! </h1>
<%= form_for (@user) do |f| %>
  <%= f.label :email %><p class="error email-error"></p>
  <%= f.email_field :email %>       

  <%= f.submit "Sign Up", class: 'btn' %>   
<% end %>

和一个 CoffeeScript 文件 (/user.js.coffee):

ready = ->
  $('form').submit ->

    $('.error').text ''    
    email = $('#user_email').val()

    if email == ''
      $('.email-error').text 'Please enter your email.'

    false
  return

$(document).ready(ready)
$(document).on('page:load', ready)

但是当我尝试添加第二个 View (/sessions/new.html.erb) 时,两种表单的错误消息都不会显示:

<h1> Log In </h1>
<%= form_for(:session, url: login_path) do |f| %>
  <%= f.label :email %><p class="error email-error"></p>
  <%= f.email_field :email, :id => "session_email" %>

  <%= f.submit "Log In", class: 'btn' %>    
<% end %>

和 CoffeeScript 文件(/sessions/js.coffee):

main = ->

  $('form').submit ->

    $('.error').text ''    
    email = $('#session_email').val()

    if email == ''
      $('.email-error').text 'Please enter your email'

    false
  return

$(document).ready(main)
$(document).on('page:load', main)

我知道coffeescript最终会被rails编译成一个文件,所以它不知道我引用的是哪一种“形式”。但是当我尝试向表单添加 id 标签时,我什至无法让一个表单正常工作。我已经被困在这个问题上两天了,无法弄清楚。任何帮助将不胜感激。谢谢!

最佳答案

在“mu 太短”的帮助下,我能够让错误消息出现在两种表单上。问题在于 .submit() 绑定(bind)到一种表单并阻止它绑定(bind)到第二种表单。添加 .unbind() 修复了这个问题:

ready = ->
  $('form.new_user').submit ->

    $('.error').text ''    
    email = $('#user_email').val()

    if email == ''
      $('.email-error').text 'Please enter your email.'

    $('form').unbind('submit')  
    false
  return

$(document).ready(ready)
$(document).on('page:load', ready)

和第二个 CoffeeScript 文件:

main = ->

  $('form.s_login').submit ->

    $('.error').text ''    
    s_email = $('#session_email').val()

    if s_email == ''
      $('.email-error').text 'Please enter your email'

    $('form').unbind('submit')  
    false
  return

$(document).ready(main)
$(document).on('page:load', main)  

关于javascript - Rails 4.1.6 form_for Coffeescript 在多个 View 上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29189997/

相关文章:

javascript - 如何在移动到下一页之前为每个元素的 jquery 函数设置动画

javascript - 如何在 javascript/html 中调整图像大小

javascript - 如何使用 Selectize.js 从完整表格中进行选择?

javascript - 在 Node.js 中处理 Coffeescript 代码

javascript - CoffeeScript 有类析构函数吗?

asp.net - 使用 JavaScript 显示页面加载进度

javascript - javascript 中的 Android WebView : is there a way,,加载另一个 javascript 文件并保留堆栈跟踪的文件名/行号信息?

mysql - 恢复迁移时 ActiveRecord::IrreversibleMigration 异常

ruby-on-rails - Ruby on Rails 5.2 - 具有主动存储的背景图像

javascript - 在 Dashing Widget 的 Coffeescript 中加载 `ready` 上的数据