0
$("ul.haschild").hide()    
$("#menu2 li span").click(function(){

        if ($("ul.haschild:hidden")) {
               $('ul.haschild').show('slow');
         $(this).("background",'url("images/image.jpg") no-repeat scroll right 10px #004DC1');
            }
            else if ($("ul.haschild:visible")) {
             $("ul.haschild").hide('slow');
         $(this).("background",'url("images/image2.jpg") no-repeat scroll right 10px #004DC1');
            }

       });

我的代码有什么问题,隐藏功能不起作用并且不改变背景?

html代码:

<ul id="menu2">
<li class="parent"><a href="/taxonomy/term/6">one</a><span></span><ul class="haschild">
<li><a href="/taxonomy/term/14">two</a></li>
<li><a href="/taxonomy/term/13">three</a></li>
</ul>
</li>
<li><a href="/taxonomy/term/7">four</a></li>
<li><a href="/taxonomy/term/8">five</a></li>
</ul>
4

2 回答 2

2

有一些东西丢失/不正确:

  • 首先,当带有孩子的菜单项具有“父”类时,为什么要在菜单中查找每个 li:

    $('#menu2 li.parent span').click( function()

  • 您可能只想查找被单击的菜单项的子项:

    $(this).parent().find('ul.haschild')

  • 最后但并非最不重要的一点是,您应该使用.css('attribute', 'value')

    $('#menu2 li.parent span').click( function()
    {
        if( $(this).parent().find('ul.hasChildren:hidden').length > 0 )
        {
            $(this).parent().find('ul.haschild').show(500);
            $(this).css('background', 'background: ....;");
        }
        else
        {
            $(this).parent().find('ul.haschild').hide(500);
            $(this).css('background', 'background: ......;')
        }
    });

于 2012-12-04T10:03:47.240 回答
0

您的if-clause 不正确。更改以下内容:

if ($("ul.haschild:hidden")) {

至:

if ($("ul.haschild:hidden").length > 0) {

另外,您的第二个if无关紧要。如果元素未隐藏,则根据定义它必须是可见的。所以你可以把那个放在外面。

于 2012-12-04T09:47:16.510 回答