0

<li>が呼び出されたときに動的に要素を追加する次のコードがありますaddBTS()。クリックハンドラーは<li>、jQuery.onclickイベントを使用して現在および将来のすべての要素にアタッチされます。

class Toolbar
  constructor: () ->

    @selected_BTS = undefined
    @bts_dropdown_selecion_clickhandler()

  addBTS: (name) =>
    $('#bts-dropdown').append "<li>#{name}</li>"

  bts_dropdown_selecion_clickhandler: () =>
    $('#bts-dropdown li').on 'click', ->
      console.log $(this).html
      Toolbar.selected_BTS = $(this).html
      $('#bts-display-button').html(@selected_BTS)

<li>何らかの理由で、生成された要素のいずれかをクリックしても、クリックイベントは抵抗しません。誰かがこれが機能しない理由を説明するのを手伝ってもらえますか?ありがとうございました。

4

1 に答える 1

1

のバインディングはon、バインディングの時点から存在する親要素にバインドする必要があります。直接にバインドする$('#bts-dropdown li')と、静的なliのみが検出されます。動作する方法onは次のとおりです。

$('#bts-dropdown').on('click', 'li', function()
{
});

ただし、#bts-dropdownが変更されると想定される場合でも、次の安全なルートを使用してください。

$(document).on('click', '#bts-dropdown li', function()
{
});

その構文はコーヒースクリプトでどのように見えるか(これは私が想定していることですか?正しいオーディエンスにヒットするようにタグを編集したいかもしれません)、よくわかりません。しかし、これにより、正しい構文に配置する方法がわかれば、必要な場所にたどり着くことができます。他の誰かが適切な構文でより正しい解決策を提供している場合は、それを正解としてマークしてください。助けようとしているだけです。

私の推測は:

$('#bts-dropdown').on 'click', 'li', ->

html編集:必要なメソッドを呼び出すときに、コンソールに記録されているものの新しい問題に対処します()。これがないと、呼び出されたプロパティ(この場合は関数)にアクセスしてhtml呼び出しますtoString。表示されているのはjQueryhtml関数本体です。

console.log $(this).html()
于 2013-02-23T02:34:04.420 に答える