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

2 番目の例では、change イベントに別のイベント ハンドラーを接続し、そのイベント ハンドラーに 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最初の例では、コールバックとして渡します。しかし、2 番目の例では、これを無名関数 ( => @select_json_changehandler()) でラップしているため、引数が渡されません。最初と同じコールバックを渡す場合:

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

期待どおりに動作するはずです。

于 2013-02-27T17:57:24.770 に答える