【问题标题】:CoffeeScript Confusion? (KeyUp Jquery)CoffeeScript 混乱? (KeyUp Jquery)
【发布时间】:2012-02-17 07:58:59
【问题描述】:

我刚刚开始使用 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:23Uncaught TypeError: Object [object Object] has no method 'keyUp'

有什么想法吗?

【问题讨论】:

  • 糟糕!我的愚蠢错误。我在脚本中进一步键入了 keyUp 而不是 keyup。 :)

标签: coffeescript


【解决方案1】:

无论如何,该代码都是错误的。您发布的 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

【讨论】:

    【解决方案2】:

    您在评论中指出的问题并不是您唯一的问题。您需要在(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) {
        // ...
    

    这不仅有意义,它也能做你想做的事。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      • 2010-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多