Coffeescript 咖啡脚本混乱?(keyupjquery)

Coffeescript 咖啡脚本混乱?(keyupjquery),coffeescript,Coffeescript,我刚刚开始用coffeescript来了解所有的大惊小怪是怎么回事,我喜欢它。然而,当我把一本旧剧本转换成咖啡时,我遇到了一个问题: $(function() { $(create_MP).keyup(function(e){ if(e.which == 16) { isShift = false; } }); }); 这就是我之前使用的JQuery,因此我尝试将其转换为coffeescript: jQuery ->

我刚刚开始用coffeescript来了解所有的大惊小怪是怎么回事,我喜欢它。然而,当我把一本旧剧本转换成咖啡时,我遇到了一个问题:

$(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:23未捕获类型错误:对象[Object Object]没有方法“keyUp”


有什么想法吗?

你在评论中提到的问题不是你唯一的问题。您需要在
(e)
前面加一个空格,否则CoffeeScript会认为您试图调用
keyup
函数,参数为
e
。你想说:

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) {
    // ...

这不仅是有意义的,而且也是你想让它做的。

你在评论中提到的问题并不是你唯一的问题。您需要在
(e)
前面加一个空格,否则CoffeeScript会认为您试图调用
keyup
函数,参数为
e
。你想说:

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) {
    // ...

这不仅是有意义的,它还做了您希望它做的事情。

不管怎样,代码都是错误的。您发布的咖啡脚本相当于:

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

不管怎样,那个代码是错误的。您发布的咖啡脚本相当于:

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

呜呜!我愚蠢的错误。我在脚本中输入了keyUp而不是keyUp.:)呜呜!我愚蠢的错误。我在脚本中输入了keyUp而不是keyUp.:)