jQuery切换隐藏选择器

时间:2016-05-08 20:02:41

标签: jquery jquery-animate

我想使用jQuery Sub OpenCustomerData() Workbooks.Open Filename:=Sheets("Individual").Range("customer_id").Value End Sub 函数在单击元素(toggle())时从左侧滑动屏幕外div(#mobileNav),然后单击元素再次单击,div再次滑出屏幕。我点击了滑动工作,但触发元素被隐藏 - 标签中注入#mobileMenu - 这使得无法再次点击将div滑回。这是相关的代码:

display: none

$(document).ready(function(){ $('#mobileMenu').click(function() { $("#mobileMenu").toggle(function() { $('#mobileNav', this).animate({left: '0' }); }, function() { $("#mobileNav", this).animate({left: '-380px'}); }); }); }); 最初设置为#mobileNav

left: -380px

答案可能会使用范围界定,但我似乎无法理解它是如何运作的。

一如既往 - 感谢任何和所有的帮助 - 乔

1 个答案:

答案 0 :(得分:2)

问题是因为toggle()方法不再以您期望的方式运行。功能之间的切换'签名是deprecated in 1.8 and removed in 1.9

相反,您需要自己处理行为的变化。在这种情况下,通过检查元素的当前left位置:

$('#mobileMenu').click(function() {
    $(this).toggle(function() {
        var leftPos = parseInt($(this).css('left'), 10) == 0 ? '-380px' : 0;
        $('#mobileNav').animate({ left: leftPos });
    });
});

或者,最好,您可以在CSS中执行动画,只需使用toggleClass来触发它:

#mobileNav {
    left: 0;
    transition: left 0.5s;
}
#mobileNav.open {
    left: -380px;
}
$('#mobileMenu').click(function() {
    $('#mobileNav').toggleClass('open');
});

最后,请注意您使用上下文id选择器($("#mobileNav", this))是多余的,因为id属性在文档中应该是唯一的,因此上下文选择器没有实际意义。