1

我正在生成进入无序列表的列表项。然后我想听听点击这些列表项中的任何一个。我知道我没有发布完整的代码,但我希望我没有必要这样做。我的 jQuery click 函数是否完全忽略了像这样附加的元素?我几乎尝试了所有方法,但找不到原因!我只想看到我的“大声笑”警报!:(

  $.each(entries, function(i, v) {
    s += '<li';
    if (favouriteItem(v.title)) s += ' data-theme="e"';
    s += '><a href="#feedItemPage" class="contentLink" data-transition="slide" data-entryid="'+i+'">' + v.title + '</a></li>';
  });

  $("#linksList").append(s);
  $("#linksList").listview("refresh");

    $("li").click(function() {
      alert("lol");
      selectedEntry = $(this).data("entryid");
    });

尽管这些项目确实在视觉上出现,但源代码仍然是这样的:

  <div data-role="content">
      <ul data-role="listview" id="linksList" data-divider-theme="b" data-inset="false"></ul>
  </div>

暗示那里没有 li 元素。然而它们确实在视觉上显示?在我跳入熔岩池之前,请有人救我。

4

2 回答 2

7

改变:

$("li").click(function() {
  alert("lol");
  selectedEntry = $(this).data("entryid");
});

$('#linksList').on('click', 'li',function() {
  alert("lol");
  selectedEntry = $(this).data("entryid");
});

当您向文档动态添加元素时,您需要使用.on()'s委托事件语法。

事件处理程序仅绑定到当前选定的元素;当您的代码调用 .on() 时,它们必须存在于页面上。为确保元素存在并且可以被选择,请在页面 HTML 标记中的元素的文档就绪处理程序内执行事件绑定。如果将新 HTML 注入页面,请在将新 HTML 放入页面后选择元素并附加事件处理程序。

于 2013-06-03T20:18:28.243 回答
1

使用委托:

$("#linksList").on('click',"li",function() {
      alert("lol");
      selectedEntry = $(this).data("entryid");
    });
于 2013-06-03T20:20:43.297 回答