2012-02-16 77 views
1

我剛開始使用coffeescript來看看所有的大驚小怪,我喜歡它。但是有一個問題在轉換我的一個老劇本時,咖啡我:CoffeeScript混亂? (KeyUp Jquery)

$(function() { 
    $(create_MP).keyup(function(e){ 
     if(e.which == 16) { 
      isShift = false; 
     } 
    }); 
}); 

這是JQuery的,我收到所以我試圖把它改造成的CoffeeScript:

jQuery -> 
    $(create_MP).keyup(e) -> 
     if e.which == 16 
      isShift = false 

但我

application.js:23Uncaught TypeError: Object [object Object] has no method 'keyUp'

任何想法:打開控制檯時出現此錯誤?

+0

Woops!我愚蠢的錯誤。我在腳本中輸入了keyUp而不是keyup。 :) – andy 2012-02-16 23:53:20

回答

3

您在評論中注意到的問題並不是您唯一的問題。您需要在(e)之前留出一個空格,否則CoffeeScript會認爲您嘗試使用參數e調用keyup函數。你要這樣說:

jQuery -> 
    $(create_MP).keyup (e) -> 
     if e.which == 16 
      isShift = false 

沒有空間,你的JavaScript將是這樣的:

jQuery(function() { 
    return $(create_MP).keyup(e)(function() { 
    // ... 

並沒有任何意義,因爲keyup(e)不會返回的功能。但是,如果添加的空間,然後(e) ->變成一個匿名函數,它接受一個e參數的定義:

jQuery(function() { 
    return $(create_MP).keyup(function(e) { 
    // ... 

不僅做是否有意義,它確實你想要它做的一樣好東西。

+0

非常感謝你! :)你爲我節省了很多搜索。 – andy 2012-02-17 00:00:45

8

無論如何,該代碼都是錯誤的。您發佈的CoffeeScript中是相同的:

jQuery(function() { 
    $(create_MP).keyup(e)(function() { 
     if (e.which == 16) { 
      isShift = false 
     } 
    } 
} 

也就是說,你打電話的keyup(e)結果,並傳遞一個函數給它。你想要的是用函數作爲參數調用keyup()。修復它的最簡單的方法就是在keyup(e) ->之間加一個空格。

jQuery -> 
    $(create_MP).keyup (e) -> 
    isShift = false if e.which is 16