【问题标题】:jQuery not working when page loaded via AJAX通过 AJAX 加载页面时 jQuery 不起作用
【发布时间】:2014-08-12 15:56:03
【问题描述】:

我有一个加载了 jQuery 的索引页面以及一个用于滑块插件的 js 文件。然后我使用点击事件来使用 .load 加载外部页面,如下所示:

//jQuery loaded from Google CDN here (in head)

jQuery( document ).ready(function() {
    jQuery( ".button" ).click(function() {
        var myUrl = "/url-to-page";
        jQuery( "#target-div" ).load(myUrl);
    });
});

这成功地将外部页面加载到#target-div,但在索引页面上加载的 jQuery 不会在从外部页面加载的元素上触发。例如,我在外部页面上有一些图像(用于滑块插件),但滑块插件不会将它们变成幻灯片,就像我将这些相同的图像(在包装器 div 内)直接放到索引页上一样.

外部页面没有任何 html、head 或 body 标签——只有我想加载的内容包装在一些 div 中。

有人知道让 jQuery 在外部加载页面上工作的“技巧”吗?

【问题讨论】:

  • 您如何尝试处理或调用动态加载的其他页面中的那些元素?
  • 没有技巧——当插件和其他脚本运行以进行设置时,当前页面 DOM 中不存在来自外部页面的内容。 jQuery 无法操作它找不到的东西。

标签: javascript jquery html ajax


【解决方案1】:

问题是您的点击事件已被绑定。您需要将点击事件绑定到页面上新创建的元素加载之后。 Jquery 的 load 方法接受一个函数作为第二个参数。一旦加载完成就会触发它。

jQuery( document ).ready(function() {
    jQuery( ".button" ).click(function() {
        var myUrl = "/url-to-page";
        jQuery( "#target-div" ).load(myUrl, function () {
          // bind events here
        });
    });
});

编辑:使用事件委托

$(function () {    //shorthand for document ready
    $('#target-div').on('click', '.button', function () {
        $("#target-div").load("/url-to-page");
    });
});

#target-div 中的每个.button 都将绑定click 事件。点击事件也将绑定到添加到#target-div 的每个.button 元素。希望这会有所帮助。

【讨论】:

  • 您应该为此使用Event Delegation,这意味着您只需在加载时附加事件。
  • 啊,我明白了。因此,使用on 将允许您将第二个选择器绑定传递给第一个选择器中的所有内容(甚至是新添加的元素)。这解决了上述解决方案可能出现的所有 .. 异步/双重绑定问题。谢谢
  • 感谢你们!将此标记为答案。
  • 谢谢,我将按照@Jivings 的建议使用on 编辑并发布一个示例
猜你喜欢
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-15
  • 1970-01-01
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多