jQuery和用户定义函数的范围问题

时间:2012-12-17 22:08:31

标签: jquery scope

我相信在尝试调用用户定义的函数时,我遇到了范围问题。

我的用户定义函数位于外部文件中,如下所示:

alert("1");//executes
(function(jQuery){
    alert("2");//executes
    jQuery.fn.slider = function(params) {
    alert("3"); //never hits because the function is never called.
    //code here
    };
})(jQuery);

我尝试用以下方法调用:

<script type="text/javascript">
// <![CDATA[
jQuery(document).ready(function(){
    alert("1-2");//This executes.
});     

jQuery(document).ready(function(){
    jQuery("#slider").slider({//Function doesn't exist error
        slideSize: 5,
    duration: 300,
    photos: []
    });
});    
// ]]></script>

我把那个警报放在那里只是为了查看jQuery对象是否存在。我正在使用noConflict,因为我在页面上也有原型代码。

从我在这个问题上看到的https://stackoverflow.com/a/4083362我认为我必须做一些事情:

window.slider = jQuery.fn.beerSlider;

并使用以下内容访问它:

slider("#slider").myPlugin();

myPlugin在哪里我想要的名字?但我确信这不正确。

我的滑块的html是:

<div id="slider">
    <a href="#"><img src="../images/1.jpg" alt="" border="0" /></a> 
    <a href="#"><img src="../images/2.jpg"alt="" border="0" /></a> 
</div>

有人可以帮我解释为什么我有问题吗?

编辑:我先包含'jquery-1.8.3.min.js',然后我有$.noConflict();行。然后我使用原型框架包含外部文件。然后我包含我的用户定义函数,最后调用它。但是,我认为jQuery是在我调用我的函数时定义的,因为在我调用函数之前,我使用匿名jQuery函数来执行行alert("1-2");//this executes

警报的顺序如下:(1,2,1-2)

我看到jsfiddle运行正常,我正在尝试查看与我的代码有什么不同。它可能与我的页面上有原型框架代码这一事实有关吗?我正在使用$.noConflict()并按照此处的说明http://docs.jquery.com/Core/jQuery.noConflict

  

注意:在包含jQuery javascript文件之后,但在包含任何其他冲突库之前,以及在实际使用其他冲突库之前,必须调用此函数,以防最后包含jQuery。可以在jQuery.js文件的末尾调用noConflict来全局禁用$()jQuery别名。 jQuery.noConflict返回对jQuery的引用,因此可以用它来覆盖jQuery对象的$()别名。

编辑2:好的,现在我找到了关于jQuery.noConflict()用法的另一页,它告诉我有关订单的不同之处。 http://docs.jquery.com/Using_jQuery_with_Other_Libraries。看起来我找到的第一页可能是某些人可以编辑的,所以我假设第一页不正确。但是,在关注第二页后,我的设置似乎仍无法正常工作。

以下是指向我网站的链接:http://tinyurl.com/d8ewd9a相关网页的部分位于工作滑块下方。有了Jasper Group,ARD,ALLsteel等的图像。在我的问题中,我稍微改变了一些我真正使用的id。

1 个答案:

答案 0 :(得分:0)

我发现了问题所在。似乎页面上有第二个jQuery包含。所以在我添加我的函数之后重新定义了jQuery。这就是我尝试调用它时未定义的原因。

我现在永远不会忘记的东西。

感谢您的帮助。