【问题标题】:jQuery .click() event not firing on link created with .load()jQuery .click() 事件未在使用 .load() 创建的链接上触发
【发布时间】:2011-12-22 07:06:12
【问题描述】:

如果菜单在 id="content"(静态 HTML)之外,.click() 事件会触发,但当菜单在 id="content"(使用 .load() 的动态 HTML)内时,该事件不起作用。

点击功能:

$(document).ready(function () {
    $("a.type").click(function () {
        var type = $(this).data("id");
        $('#content').load("content.php?" + type);
    });
});

标题上的菜单链接(点击事件在这里有效):

<li><a data-id="1" class="type">Cars</a></li>
<li><a data-id="2" class="type">Houses</a></li>

.load() 填充这个(点击事件在这里不起作用):

<div id="content"></div>

【问题讨论】:

  • 你能发布一个 JSFiddle 来展示一个例子吗?
  • 在通过AJAX加载数据之前,事件已经被绑定。 Jake Feasel 的回答应该可以解决这个问题,但只是想您可能想知道为什么会发生这种情况。

标签: jquery


【解决方案1】:

改变

$("a.type").click(function 

$("a.type").live('click', function 

或者,如果你使用 jQuery 1.7+,你也可以使用 $(document).on("click", "a.type", function(){}),而不是 live。

【讨论】:

  • live 在 jQuery 1.7+ 中已弃用,不应使用(改用 on)。即使在 1.7 之前,也应该使用 delegate
  • 我认为文档现在建议使用on(jquery 1.7+)或delegate(以前的版本)而不是live
  • @JakeFeasel - 如前所述,即使在 1.7 之前 live 也不推荐。请改用delegate
  • 另请注意,您的on 示例无法解决问题。它相当于.click。您需要将事件处理程序绑定到祖先元素,并使用on 的第二个参数作为选择器(在本例中为a.type)。这同样适用于delegate
  • 我已经修复它以反映您的观点,@JamesAllardice。感谢您的提示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-20
相关资源
最近更新 更多