2015-09-24 45 views
0

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

我加入$(document).on 'ready page:load'this post提及,但它似乎并没有产生任何影响。

我相应.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 %> 
+0

你确定这个coffescript文件包含在你的资产管道中吗?它是否包含在页面源代码中?你在浏览器的控制台中是否有任何错误? – bigsolom

+0

@bigsolom是的,它在我的资产文件夹中。一旦页面加载,JavaScript文件也存在。控制台上没有错误 – user1692342

回答

0

你确定脚本不能运行?你是否在$(document).on 'ready page:load'回调中放入console.log并检查它?

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

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

+0

我更正了getElementById中的值部分。我检查了铬调试器,它遵循预期的路径。然而setCustomvalidity中设置的消息并未执行。我认为它与您提到的窗口有关。但是我无法遵循它 – user1692342