jQuery插件仅适用于最后声明的元素

时间:2009-03-06 01:30:07

标签: jquery jquery-plugins

我写了一个jQuery插件来控制同一页面上几个图像的动画。呼叫在开头初始化为:

$(“#image1”)。anims({top:“240px”,left:“300px”});

$(“#image2”)。anims({top:“160px”,left:“430px”});

anims插件基本上根据提供的顶部和左侧参数在mouseover和mouseout(使用悬停)上应用了一堆动画。但是,一旦在Safari中加载了所有内容,将鼠标悬停在#image2上会导致#image1使用为#image2设置的参数进行动画处理。使用为#image1设置的参数,将#image1设置为#image1,就像它应该的那样。在Firefox中,情况正好相反。我想这与它们加载的顺序或其他东西有关。

我可能做错了什么?我在整个插件中使用$(this)进行animate()和其他各种调用。

3 个答案:

答案 0 :(得分:1)

我解决了我的问题。在我的插件中,我写道:

img = $(this);

然后使用img变量控制其后的所有内容。将其更改为:

var img = $(this);

解决了我的问题。愚蠢的错误。

答案 1 :(得分:0)

我会仔细检查此页面上的所有要点: http://docs.jquery.com/Plugins/Authoring

  
      
  • 将文件命名为jquery。[插入插件名称] .js,例如。 jquery.debug.js
  •   
  • 所有新方法都附加到jQuery.fn对象,所有函数都附加到   jQuery对象。
  •   
  • 在inside方法中,'this'是对当前jQuery的引用   对象。
  •   
  • 您附加的任何方法或功能必须在结尾处加上分号(;) -   否则代码会在什么时候破坏   压缩。
  •   
  • 除非明确指出,否则您的方法必须返回jQuery对象   否则。
  •   
  • 您应该使用this.each来迭代当前匹配的集合   元素 - 它产生干净和   兼容的代码。
  •   
  • 总是在你的插件代码中使用jQuery而不是$ - 允许   用户更改jQuery的别名   在一个地方。见下文   解释和更优雅   溶液
  •   

例如,您说您使用的是$(this),但您应该使用jQuery(this)。我怀疑这是问题所在,但是你应该密切关注文档,以防万一因为不遵循其中一个而导致一些意外行为。你是否返回了jQuery对象?

除此之外,你真的需要发布anims插件的来源,这样我们就可以尝试看看可能出现的问题。

答案 2 :(得分:0)

当某些操作仅应用于选择/数组的最后一个元素或您获得所选内容的最后一个ID /属性时,您可能还会发现this article解释常见的javascript问题。