1

我正在尝试激活函数调用并传递文件选择事件。以下非 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 做第一个代码示例 - 非常感谢任何帮助:)

4

2 回答 2

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
于 2013-02-27T14:59:29.190 回答
1

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

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

它应该按预期工作。

于 2013-02-27T17:57:24.770 回答