Coffeescript没有在Ruby on Rails上执行

时间:2015-09-24 05:04:33

标签: javascript ruby-on-rails ruby coffeescript

我正在尝试使用Coffeescript在我的Ruby on Rails应用程序中进行一些表单验证。但是脚本没有执行。我正在尝试添加验证以检查输入的密码和输入的确认密码是否相等。

$(document).on 'ready page:load', ->
  password = document.getElementById('user_password').value
  password_confirmation = document.getElementById('user_password_confirmation').value

  validatePassword = ->
    password = document.getElementById('user_password').value
    password_confirmation = document.getElementById('user_password_confirmation').value
    if password.value != password_confirmation.value
      password_confirmation.setCustomValidity 'Passwords Don\'t Match'
    else
      password_confirmation.setCustomValidity ''
    return

  password.onchange = validatePassword
  password_confirmation.onkeyup = validatePassword

我在this post中提到了$(document).on 'ready page:load',但似乎没有任何效果。

我对应的.html.erb文件包含以下代码:

<%= f.password_field :password,:onkeyup => 'validatePassword()', class: 'form-control',:required=>true %>
<%= f.password_field :password_confirmation, :onkeyup => 'validatePassword()', class: 'form-control',:required=>true %>

1 个答案:

答案 0 :(得分:0)

你确定脚本没有运行吗?您是否已将console.log放入$(document).on 'ready page:load'回调中并进行检查?

接下来的事情......我相信即使脚本被执行也无法工作。在validatePassword回调中定义page:load函数时,您不能将其分配给窗口对象。这里发生的事情只是在回调中创建一个无法从外部访问的本地函数(validatePassword()文件中的erb)。你应该写window.validatePassword = ...definition...

还有一件事。这一行password = document.getElementById('user_password').value返回一个值,即String。几行之后你会写password.onchange = validatePassword,但问题是password没有onchange属性(因为它是一个字符串)。您可能想要实现的目标是password = document.getElementById('user_password')