【问题标题】:How to hook a click event to a dynamically created anchor tag using jQuery如何使用 jQuery 将点击事件挂钩到动态创建的锚标记
【发布时间】:2013-02-25 22:23:30
【问题描述】:

在 jQuery 循环中,我试图将点击事件附加到动态创建的锚标记,该标记包含在 LI 元素中。 LI 本身是在静态 UL 元素内动态创建的。由于某种原因,单击锚点时不会触发任何内容。这是有问题的代码的简化版本:

$.each($.MyProject.cities, function (index, city) {
    $('<li></li>').html($("<a></a>").attr("href", "javascript:void(0)").click(function (event) {
        console.info("Anchor clicked!");
        event.preventDefault();
        return false;
    }).html($("<span></span>").text(city.FullName).attr("class", "autoText"))).appendTo($("#visiblecities"));
});

visiblecities 是 UL 元素的 id,cities 是循环在其上迭代的集合。

知道为什么点击事件不起作用吗?

【问题讨论】:

标签: dynamic anchor jquery


【解决方案1】:

使用event delegation 设置一个事件处理程序,该处理程序将对所有&lt;a&gt; 元素做出反应,即使它们是在代码执行之后添加的

$('#visibleCities').on('click', 'a', function(event) {
    console.info('Anchor clicked!');
    event.preventDefault();
    return false;
});

不过,正如 gdoron 在 cmets 中提到的,您的 &lt;a&gt; 元素目前没有任何内容,因此它们实际上是不可点击的。

【讨论】:

  • 我已经放回了构成内容的内部 span 元素。你上面的答案仍然不起作用。
  • @YosiefKesete 你有机会提供jsFiddle 演示吗?
  • @YosiefKesete 嘿,一切正常,你只是犯了一个简单的错误,你写了 $('#visiblecities') 但它应该是 $('#visibleCities') 在这里看到它jsfiddle.net/n2f4m/27
  • @YosiefKesete 正如 Peeyush 所说,id 选择器只是一个错字(在问题和我的回答中);我已经改变了它,所以它有一个大写的 C。
  • @Anthony & Peeyush,谢谢,我看到 jsfiddle 代码正在运行。但是,在我的现实世界项目中,它不起作用。也许是因为我的 UL 包含在另一个 div 的子 div 中。我在更高的 div 上调用 .show() 和 .hide() 方法。有问题吗?
【解决方案2】:

使用.on

$('a').on('click',function(){
   //code here
});

试试

$('li a').on('click',function()
{
    //code here
});

$.each($.MyProject.cities, function (index, city)
{
    $('<li></li>').html($("<a></a>").attr("href", "javascript:void(0)")).appendTo($("#visiblecities"));
});

【讨论】:

  • 这是错误的。尽管您使用了on,但您没有创建委托事件。 4 个答案 4 个错误答案。
【解决方案3】:

使用live方法而不是点击

 $.each($.MyProject.cities, function (index, city) {
        $('<li></li>').html($("<a></a>").attr("href", "javascript:void(0)").live("click",function (event) { console.info("Anchor clicked!"); event.preventDefault(); return false; })).appendTo($("#visiblecities"));
    });

【讨论】:

  • 一千次 NO!。该功能已被弃用数月(自 jQuery 1.7 发布以来),已在 1.9 版中完全从 jQuery 中删除,并将事件处理程序直接绑定到文档。它还打算被调用一次以对所有元素做出反应,而不是每个元素调用一次。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-10
  • 2012-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多