2012-02-16 52 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