2015-09-24 48 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