2013-02-27 73 views
1

我試圖激活一個函數調用並傳遞文件選擇事件。以下非JQuery的正常工作:JQuery的變化事件處理程序不工作在CoffeeScript

class AddBTS 
    constructor:() -> 

    document.getElementById('upload_JSON').addEventListener('change', @select_json_changehandler, false) 


    select_json_changehandler: (evt) => 
    console.log 'evt = ', evt 

我試過以下,它執行的函數調用,但EVT是不確定的:

class AddBTS 
    constructor:() -> 

    $('body').find('#upload_JSON').on 'change', => @select_json_changehandler() 

    select_json_changehandler: (evt) => 
    console.log 'evt = ', evt 

我怎樣才能做到正確使用JQuery的第一個代碼示例 - 任何幫助非常感謝:)

+0

您是否有另一個jQuery在您的代碼中被調用如果是這樣,那麼它可能會與這個衝突 – NetStarter 2013-02-27 13:40:58

+0

這是唯一的jQuery調用 – 2013-02-27 13:42:11

回答

2

在你的第二個例子中,你爲變更事件連接一個不同的事件處理程序,並讓該事件處理程序調用select_json_changehandler。您需要有一個參數化函數作爲事件處理函數,將事件作爲參數,然後將該事件作爲參數傳遞給select_json_changehandler。

class AddBTS 
    constructor:() -> 
     $('body').find('#upload_JSON').on 'change', (evt) => @select_json_changehandler evt 

    select_json_changehandler: (evt) => 
     console.log 'evt = ', evt 
+0

爲什麼不通過'@ select_json_changehandler'而不是做一個毫無意義的匿名函數? – 2013-02-27 16:51:22

+0

@Aaron Dufour你能證明你在答案中的含義嗎? – 2013-02-27 17:11:40

+0

@AaronDufour我只是如何回答他爲什麼不工作的問題。如果我真的想要這樣做,它會看起來很不一樣。 – 2013-02-27 18:03:48

1

在第一個示例中,您通過@select_json_changehandler作爲回調。但在第二個示例中,將其包裝在一個匿名函數(=> @select_json_changehandler())中,該函數防止傳遞參數。如果您通過與第一次相同的回叫:

$('body').find('#upload_JSON').on 'change', @select_json_changehandler 

它應該按預期工作。