0

我正在构建一个template.htm包含多个 ajax 加载内容块的页面。因为我遇到了问题,所以我加载了synchronously如下内容:

    $.ajax({
        url: 'module.htm'
    })
    .done(function(r) {
        $('#moduleA').html(r);
    });

我这样做了几次,加载各种不同的module.htm文件。它们都有一个标准的 html 文件,其中包含<!DOCTYPE html>标题、正文等。其中也有大量的 jQuery。

其中一些模块具有动态添加的元素,主要使用.append()这样的

$.ajax(......)
.done(function(response) {
    var item = $.parseJSON(response);
    // iterating voer the JSON and appending elements
    $('div').myPluginMethod(); // utilizing the plugin here
});

我使用一个特定的插件$.fn.myPluginMethod,并注意到一个问题:

问题:<script>在使用的标题中 加载插件module.htm并自行运行时 - 在之外template.htm,一切正常。在控制台中,我可以输入$.fn.myPluginMethod并返回函数。

但是如果我将module.htm文件加载到父template.htm页面中,它就不再起作用了。在控制台中,键入$.fn.myPluginMethod返回undefined

这没有意义。Firebug 显示插件脚本已加载,为什么会失败?

我的理论 不知何故,我认为这与我的 ajax 负载有关。该.done()方法不知何故无法“看到”插件的对象,因此它抛出了unknown method error. 我可以手动粘贴插件,然后它就可以工作了:

$.ajax(......)
.done(function(response) {
    var item = $.parseJSON(response);
    // iterating voer the JSON and appending elements
    // I can paste my raw plugin code here and it will work, but that's silly
}); 

我试图了解为什么这个 ajax 业务会导致问题。我认为一旦将插件加载到 DOM 中,所有脚本,无论是否动态,都将能够“看到”它的方法。

谢谢。

4

1 回答 1

2

听起来您正在从远程文件再次加载 jQuery.js。这将覆盖主页面中的 jQuery 对象。任何注册到初始 jQuery 对象的插件都将被清除。

于 2013-02-02T02:19:01.627 回答