0

我有以下代码在被调用<li>时动态添加元素。点击处理程序使用 jQuery .on 点击​​事件addBTS()附加到所有当前和未来的元素:<li>

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 回答