jQuery Simple Spy no longer works with jQuery 1.5

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-06 14:01:29

OK so in the spy() function, at the very top, try doing this:

var $insert = $(items[currentItem]).css({
    height : 0,
    opacity : 0
}).prependTo($list);

I have this mocked up here:

http://jsfiddle.net/treeface/xaJ9F/ (jsbin was annoying me)

The difference here is that you aren't declaring that it should be "display:none". There must have been a change in the implicit assumptions jQuery makes when changing the animated opacity of an object, because the plugin creator seemed to not have to change the display value after he animated the opacity to 1 and the height to whatever px. This isn't exactly the most robust plugin, though...it doesn't give you an option for setting the height, it just assumes that the first one is the height all of them will be.

Anyway...try that and see if it works. If it doesn't (or causes cross-browser issues) try reinserting the display:none and calling $insert.show() somewhere thereafter.

As @treeface said, the problem is the setting of "display: none" on the $insert element. Except, I don't think the plugin should have ever worked as it did. I believe this exploited some sort of bug that was fixed in 1.5.0. Another "fix" for the original code would be:

...
var $insert = $(items[currentItem]).css({
  height : 0,
  opacity : 0,
  display: 'none'
}).prependTo($list);

$list.find('> li:last').toggle().animate({ opacity : 0}, 1000, function () {
...

Notice the addition of the .toggle() call. In order for the newly inserted element to affect the content flow it must have a visible display.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!