我正在构建一个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-load有关。 .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中,所有脚本(无论是否动态)都能够“看到”它的方法。
感谢。
答案 0 :(得分:2)
听起来你正在从远程文件中再次加载jQuery.js。这将覆盖主页面中的jQuery对象。然后,将删除注册到初始jQuery对象的所有插件。