2017-02-15 30 views
0

我在使用Ruby on Rails的一個javascript問題(4.1.4)使用Ruby on Rails。它只有一個控制器,我不知道爲什麼 - 有沒有人有任何想法?謝謝。的CoffeeScript和jQuery不工作的一個特定視圖

####This works :) 
$(document).on "turbolinks:load", -> 
    $('#redemption_amount').keyup updateWorth 
    $('#redemption_amount').change updateWorth 

updateWorth = -> 
    discount = ($('#discount').val()/100) 
    worth = $(this).val() * discount 
    $('#redemption_worth').html(worth.toFixed(2)) 
##### 

這裏是問題:

####This does not work :(
$(document).on "turbolinks:load", -> 
    $('#purchase_amount').keyup updatePoints 
    $('#purchase_amount').change updatePoints 

    updatePoints = -> 
     points = (Math.round($(this).val() * 0.92)) 
     $('#purchase_points').html(points) 
#### 

回答

0

壓痕定義你的CoffeeScript代碼結構,所以如果你的縮進是關閉的,然後你的代碼也關閉。

在第一種情況:

$(document).on "turbolinks:load", -> 
    $('#redemption_amount').keyup updateWorth 
    $('#redemption_amount').change updateWorth 

updateWorth = -> 
    discount = ($('#discount').val()/100) 
    worth = $(this).val() * discount 
    $('#redemption_worth').html(worth.toFixed(2)) 

JavaScript的樣子:

var updateWorth; 
$(document).on("turbolinks:load", function() { 
    $('#redemption_amount').keyup(updateWorth); 
    $('#redemption_amount').change(updateWorth); 
}); 
updateWorth = function() { ... }; 

因此受到時間keyupchange被稱爲,updateWorth的值是一個函數,一切工作正常。

在第二種情況:

$(document).on "turbolinks:load", -> 
    $('#purchase_amount').keyup updatePoints 
    $('#purchase_amount').change updatePoints 

    updatePoints = -> 
     points = (Math.round($(this).val() * 0.92)) 
     $('#purchase_points').html(points) 

JavaScript的結束,如:

$(document).on("turbolinks:load", function() { 
    var updatePoints; 
    $('#purchase_amount').keyup(updatePoints); 
    $('#purchase_amount').change(updatePoints); 

    updatePoints = function() { ... }; 
}); 

你壓痕提出updatePoints回調。當keyupchange被稱爲,updatePoints的價值是undefined因爲updatePoints = function() { ... }部分還沒有達到呢。拇指


規則:

  1. 定義的東西(在代碼的行順序)使用它們之前。
  2. 要非常小心,並與您的空白是一致的:如果你縮進兩個空格在一個地方,然後縮進兩個空格到處

你應該說:

updateWorth = -> 
    discount = $('#discount').val()/100 
    worth = $(@).val() * discount 
    $('#redemption_worth').html(worth.toFixed(2)) 

$(document).on "turbolinks:load", -> 
    $('#redemption_amount').keyup updateWorth 
    $('#redemption_amount').change updateWorth 

和:

updatePoints = -> 
    points = (Math.round($(@).val() * 0.92)) 
    $('#purchase_points').html(points) 

$(document).on "turbolinks:load", -> 
    $('#purchase_amount').keyup updatePoints 
    $('#purchase_amount').change updatePoints 
相關問題