JQuery on Change事件处理程序在CoffeeScript中不起作用

时间:2013-02-27 13:38:58

标签: jquery coffeescript

我正在尝试激活函数调用并传递文件选择事件。以下非JQuery工作正常:

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正确执行第一个代码示例 - 非常感谢任何帮助:)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

在第一个示例中,您将@select_json_changehandler作为回调传递。但是在第二个示例中,您将其包装在匿名函数(=> @select_json_changehandler())中,这会阻止传递参数。如果您传递与第一个相同的回调:

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

它应该按预期工作。