rails 4.1.6 form_for 多个视图上的 coffeescript 不工作
rails 4.1.6 form_for coffeescript on multiple views not working
我可以在一个视图中显示我的 coffeescript 错误消息 (/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 文件 (/users.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)
但是当我尝试添加第二个视图 (/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 编译成一个文件,所以它不知道我引用的是哪个 'form'。但是,当我尝试向表单添加 id 标签时,我什至无法使用一种表单。我已经在这个问题上停留了 2 天,无法弄清楚。任何帮助将不胜感激。谢谢!
在 "mu is too short" 的帮助下,我能够让错误消息出现在两个表单上。问题是 .submit() 绑定到一种形式并阻止它绑定到第二种形式。添加 .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)
我可以在一个视图中显示我的 coffeescript 错误消息 (/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 文件 (/users.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)
但是当我尝试添加第二个视图 (/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 编译成一个文件,所以它不知道我引用的是哪个 'form'。但是,当我尝试向表单添加 id 标签时,我什至无法使用一种表单。我已经在这个问题上停留了 2 天,无法弄清楚。任何帮助将不胜感激。谢谢!
在 "mu is too short" 的帮助下,我能够让错误消息出现在两个表单上。问题是 .submit() 绑定到一种形式并阻止它绑定到第二种形式。添加 .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)