未捕获的类型错误:对象#<对象>没有'movingBoxes'方法

37

我正在尝试在我的asp.net mvc网站中使用movingBoxes插件,但它无法正常运行(显然)。 我已经在site.master中的head标签中导入了movingboxes.js,如下所示:

    <script src="<%: Url.Content("~/Scripts/jquery.movingboxes.js")%>" type="text/javascript"></script>

浏览器成功获取了此脚本。现在我有一个普通的视图,它从site.master继承,并且有这个调用movingBoxes插件的一小段jquery代码。

<script type="text/javascript">
    $(document).ready(function () {
        $($('#slider-one'));
        $('#slider-one').movingBoxes({
            startPanel: 1,      
            panelWidth: .5,     
            fixedHeight: false
        });

        $('#slider-two').movingBoxes({
            startPanel: 1,     
            panelWidth: .5,     
            fixedHeight: false
        });
    });
</script>
当我浏览页面时,除了这个插件之外,其他jQuery操作都能正常工作,但是对于这个插件,我遇到了错误。错误信息如下图所示: enter image description here 这是该错误的描述: enter image description here 如果有帮助,将不胜感激。 编辑 显然我有这个:
    <script type="text/javascript" src="../../Scripts/jquery-1.4.1.js" />
    <script src="<%: Url.Content("~/Scripts/jquery.movingboxes.js")%>" type="text/javascript"></script>

通过将它更改为这样,它现在可以工作:

    <script type="text/javascript" src="../../Scripts/jquery-1.4.1.js"></script>
    <script src="<%: Url.Content("~/Scripts/jquery.movingboxes.js")%>" type="text/javascript"></script>

除了我不知道顶部的 $($('#slider-one')); 是什么意思,我没有看到任何问题。也许可以检查一下文件是否被正确地包含了。 - HChen
2
请确认在“movingboxes”文件之前是否已加载了jQuery JavaScript文件?如果它们的顺序错误,你会看到类似于你正在看到的错误。 - Neil
他之前设置了一个警报,其中包含$('#slider-one'),这就是顶部悬挂选择器的来源。 - Hacknightly
@Neil,你的建议对我解决了一些后来出现的脚本问题。谢谢。 - Collin O'Connor
10个回答

40

这里有几件事情可以尝试来使它正常工作。

  1. 一定要确保您的脚本已经被引入到页面中,可以通过使用Chrome调试器的“资源”选项卡并搜索该文件来检查。

  2. 请确保在包含jQuery之后再包含该脚本,因为它肯定依赖于jQuery。

除此之外,我查看了API,并且在我看来您做得非常正确。祝你好运!

编辑:确保关闭您的脚本标签。下面的答案指向了解决方法。


3
非常感谢,伙计。我很久以前就在找这个东西了。最终的结果是JavaScript文件的排序......再次感谢! - patel.milanb
1
这不起作用是因为缺少闭合标签。请在下面从SaschaM78中找到正确的答案 - John Hunt
9
我会尽力为您翻译:请确保不要意外多次包含jQuery,否则第二次导入可能会擦除已经导入的插件。 - pseudosudo

14
请记住,只有少数元素可以自闭合,大多数其他元素必须通过添加显式的结束标记来关闭。在上述情况中,第一个脚本标签未正确关闭,第二个脚本的结束标记随后关闭了脚本部分,导致仅加载第一个脚本作为外部脚本源,并忽略第二个脚本。
有关哪些标记可以自闭合的更多信息,请查看HTML5的W3C草案(尽管在早期HTML版本中定义没有不同): http://www.w3.org/TR/html5/syntax.html#end-tags(8.1.2.1,点6)

4

我曾经遇到了同样的问题。 我改变了头部脚本的顺序,这对我有用。 每个插件需要的脚本都需要靠近。

例如:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
<script type="text/javascript" src="http://cloud.github.com/downloads/malsup/cycle/jquery.cycle.all.latest.js"></script>
<script type="text/javascript"> 
$(document).ready(function() {
    $('#slider').cycle({
            fx: 'fade' 
        });
    });
</script>

4
我曾经遇到过与jquery Responsive Slides插件(http://responsive-slides.viljamis.com/)相同的问题。
我通过不使用jQuery的简短版本$(".rslides").responsiveSlides(..,而是使用长版本jQuery(".rslides").responsiveSlides(...来解决问题。
因此,将$更改为jQuery以避免冲突或使用正确的jQuery无冲突模式(http://api.jquery.com/jQuery.noConflict/)。

谢谢,我也遇到了响应式幻灯片的同样问题。 - David Taiaroa

2

当我遇到这个问题时,是因为我试图在匿名函数的位置使用了一个实际的函数。

错误:

$(document).on('change', "#MyId", MyFunction());

正确

$(document).on('change', "#MyId", MyFunction);

或者也是正确的,如果你需要传递事件对象或其他参数。
$(document).on('change', "#MyId", function(e) { MyFunction(e); });

1
我相信在JavaScript中,您仍然可以直接访问MyFunction而无需将其包装在匿名函数中,只需删除括号即可:$(document).on('change', "#MyId", MyFunction); - Joshua
非常感谢您提到这个问题!我已经更新了答案并重构了我正在工作的项目。 - Valamas

1
我曾经遇到同样的问题,我链接了两次jQuery。较晚版本覆盖了我的插件。
我只需删除后面的jQuery,它就开始正常工作了。

我也不小心犯了这个错误。 - Mike Causer

1

我也遇到了这样的问题,因为我使用了IMG标签和UL标签。

尝试将“corners”插件应用于诸如$('#mydiv').corner()$('#myspan').corner()$('#myp').corner()等元素,但不要用于$('#img').corner()! 这个规则与在指定元素中添加子DIV以模拟圆角效果有关。我们知道IMG元素不能有任何子元素。

我通过将所需元素包装在DIV中并将IMG更改为具有background:CSS属性的DIV来解决了这个问题。

祝你好运!


1

实际上,我认为您只下载了脚本的一部分。 在下载jQuery网站上的整个脚本之前,请尝试勾选“核心”复选框。


0
我发现我在使用选择器来渲染我的列高图表时,也在使用rendorTo div。显然,它会为您添加选择器,因此您只需要传递id。
将 renderTo: $('#myGraphDiv') 转换成字符串 'myGraphDiv' 即可解决错误,希望这也能帮助其他人解决问题。

0

同时,确保您正在使用正确的jQuery版本也是一个好主意。最近我接手了一个使用jQuery 1.6.2的项目,但它无法与hoverIntent插件配合工作。将其升级到最新版本后,问题得到了解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接