【问题标题】:Using jQuery to select a dynamically created element使用 jQuery 选择动态创建的元素
【发布时间】:2016-07-27 16:57:44
【问题描述】:

试图解决这个问题,我想我知道问题所在,但我不知道如何解决它。当我的页面第一次加载时,我使用 JSON 文件在页面上提供一些链接,使用 $.getJSON 动态创建它们并为它们提供 ID。我的代码是(这只是我现在感兴趣的一点,我当然关闭了函数):

    $(function() {

        $.getJSON("data.json", function(data) {
            var navOutput = "";
            for (var key in data.navigation) {
                navOutput += '<li><a id="' + key + '">' + data.navigation[key] + '</a></li>'; // Create list items with ID 'key'
            }
            $("#mainNav").html(navOutput);

页面上的所有内容都可以正常加载。在 $.getJSON 函数之外,我试图将事件侦听器分配给其中一个动态创建的 ID,例如:

$("#cast").click(function() {
    alert("Testing");
}); //click function

这似乎不起作用。对此可能有一个简单的答案,但我无法弄清楚。如果我将事件处理程序分配给在 HTML 中创建的页面上的 ID,它会起作用,因此它与这些动态 ID 有关。任何帮助将不胜感激。

【问题讨论】:

  • 你什么时候做这些相对于彼此的事情?添加点击回调将仅适用于此时存在的元素,因此您需要在包含 JSON 后添加回调。
  • 嗨,戴夫,我在 getJSON 之后添加了事件处理程序(在页面下方,在函数之外)。这就是为什么我认为 id 在到达事件处理程序时已经创建的原因。
  • 不能保证仅仅因为它进一步下降,它就会在 JSON 加载后发生;网络延迟意味着它可能不会有。您只需在传递给getJSON(或它调用的某个函数)的函数中添加钩子。或者使用 phobos 的解决方案,它将适用于所有未来元素以及现有元素(但会增加一些开销)。
  • 啊!好的,谢谢戴夫。明白了。 Phobos 的解决方案对我有用。关于延迟的好电话,我从没想过。干杯 =)

标签: jquery html getjson


【解决方案1】:

改变

$("#cast").click(function() {
    alert("Testing");
}); 

$("body").on("click","#cast",function(e) {
    alert("Testing");
}); 

您需要使用on 而不是click 设置处理程序。升级到live()。它允许您将处理程序附加到动态加载的元素。 click 将仅附加在 dom 就绪时,即在页面最初加载时。

【讨论】:

  • 出于某种原因,这样做似乎完全无法加载我的 JSON 文件。我会仔细看看“on”和“live”。谢谢=)
  • 明白了!非常感谢你们。对此,我真的非常感激。现在可以使用了。
  • 你不需要把它放在$.getJSON回调中。把它放在任何地方做准备。如上更新代码后,您是否看到任何错误?
  • 不,没有更多错误。事件处理程序位于 getJSON 回调之外,但仍在 document.ready 中。效果很好。非常感谢火卫一和戴夫! =)
  • 最后一件事,“on”是“live”的替代品(即“live”是否已弃用?)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-21
  • 2017-08-02
  • 1970-01-01
  • 2011-12-19
  • 2015-03-04
  • 2013-01-21
相关资源
最近更新 更多