Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Coffeescript和jQuery在特定视图上使用RubyonRails不起作用_Jquery_Ruby On Rails_Ruby On Rails 4_Coffeescript - Fatal编程技术网

Coffeescript和jQuery在特定视图上使用RubyonRails不起作用

Coffeescript和jQuery在特定视图上使用RubyonRails不起作用,jquery,ruby-on-rails,ruby-on-rails-4,coffeescript,Jquery,Ruby On Rails,Ruby On Rails 4,Coffeescript,我在RubyonRails(4.1.4)中遇到了javascript问题。它只有一个控制器,我不明白为什么——有人知道吗?多谢各位 ####This works :) $(document).on "turbolinks:load", -> $('#redemption_amount').keyup updateWorth $('#redemption_amount').change updateWorth updateWorth = -> discount =

我在RubyonRails(4.1.4)中遇到了javascript问题。它只有一个控制器,我不明白为什么——有人知道吗?多谢各位

####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)
####

缩进定义了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() { ... };
因此,当调用
keyup
change
时,
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
放入回调中。调用
keyup
change
时,
updatePoints
的值为
undefined
,因为尚未到达
updatePoints=function(){…}
部分


经验法则:

  • 在使用它们之前定义它们(按代码的行顺序)
  • 请非常小心并与空格保持一致:如果在一个位置缩进两个空格,则在所有位置缩进两个空格
  • 你应该说:

    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