2012-02-16 15 views
1

私はちょうどすべての大騒ぎが何であるかを見るためにcoffeescriptを使い始めました。しかし、コーヒーに私の古いスクリプトを超える変換するときに、私が持っていた問題があります:CoffeeScript Confusion? (KeyUp Jquery)

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

しかし、私:そう、私はCoffeeScriptのにそれを変換しようとした前に、私が持っていたjQueryの

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

コンソールを開くときにこのエラーが出る:

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

任意のアイデア?

+0

Woops!私の愚かな間違い。スクリプト内でkeyupの代わりにkeyUpをタイプしました。 :) – andy

答えて

3

コメントに記載されている問題は、唯一の問題ではありません。 (e)の前にスペースが必要ですか、CoffeeScriptはという引数でkeyup関数を呼び出そうとしていると思います。あなたはこれを言いたい:

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

をしてkeyup(e)機能を返さないので、それはどんな意味がありません。

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

スペースがなければ、あなたのJavaScriptは次のようになります。しかし、あなたがスペースを追加した場合、その後、(e) ->は単一e引数取る無名関数の定義は次のようになります。

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

をしていないだけで意味をなすんので、それはあなたがそれが同様に何をしたいのかありません。

+0

華麗なありがとう! :)あなたは私に多くの検索を救った。 – andy

8

このコードは間違っています。あなたが投稿のCoffeeScriptはこれに相当します、あなたはkeyup(e)の結果を呼び出し、それに関数を渡しているされて

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

。あなたが望むのは、関数を引数としてkeyup()を呼び出すことです。最も簡単な方法は、keyup(e) ->の間にスペースを入れるだけです。

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