我刚刚开始使用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'
有什么想法吗?
答案 0 :(得分: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
答案 1 :(得分:3)
您在评论中注意到的问题不是您唯一的问题。您需要在(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) {
// ...
这不仅有意义,它还可以做你想做的事。