0

我有一个罕见的问题。可能是jQuery的一个错误,我不知道如何解决它。

当我使用下面的方法来悬停一个元素时,我正在监视元素的长度。

问题是使用hide() + slide时添加元素 'el' 的长度将返回0

hover(
  function() {
    if (!trigger.next('#id').length)    // if #id not exsist, add html
      el = trigger.after(html).next('#id') // el = new added html
    else
      el = trigger.next('#id')
    el.stop(true, true).show('slide', { direction, 'left' })  
  }, 
  function() { 
    el.hide('slide', { direction, 'left' }) 
});

如果我切换到另一种方法hide() <-just hide, animate(), fadeOut(),所有将返回1

添加的 html 已存在。但是,当 hide() + slide 时,长度不会返回 ,

完成 hide() + slide 后,将返回1

请帮助解决这个问题。

问题 el.length将返回 0 而 hide() + slide 即使 el 存在

非常感谢您的建议。

我创建了一个示例,请检查

http://jsfiddle.net/fantill/DFd7e/6/

4

1 回答 1

1

您使用jQuery beta 2.0有什么原因吗?这本来是值得一提的。

您还使用了 jQuery UI,我怀疑它是否与 jQuery 2.0.0b1 兼容。

我刚刚将 jQuery 更改为 v1.9,它似乎可以正常工作,我还添加了括号和逗号。

这是更整洁的:

if( !$('#B').length ) 
{
   el = $(this).after('<div id="B" style="display:none; width:50px; height:50px; background-color:#09F; ">YYYYYYYYY</div>').next('#B');
} 
else 
{
    el = $('#B');
}

这是更新的小提琴:http: //jsfiddle.net/DFd7e/9/

编辑:我启用了 jQuery UI,并将其替换$(this).next('#B').first().length 为 : $('#B').length

next()在您的情况下不起作用,因为 jQuery UI 在您正在制作动画的 div 周围添加了一个包装器,如果您打开开发工具,您可以看到它。

更新小提琴:http: //jsfiddle.net/DFd7e/11/

于 2013-01-17T12:21:48.323 回答