【问题标题】:Hover and nested list : which element is being hovered?悬停和嵌套列表:悬停的是哪个元素?
【发布时间】:2015-01-20 14:38:40
【问题描述】:

我有一个嵌套列表,表示深度未知的类别和子类别,它是使用数据库中的数据创建的。

我要做的是在悬停的类别旁边显示一个小图像,一个十字。

问题是我无法可靠地区分它是祖先 li 元素还是悬停的子元素,因为当我从子类别返回父类别时不会再次触发“mousein”事件。

我当前的代码是:

HTML 示例

<ol class="innerCenter" id="bdc_categories">
    <form action="?function=base_connaissances&amp;onglet=2" method="POST" id="" name="">
        <li>Hardware<img class="hidden" src="image/supp.png">
            <ol>
                <li>Ecran<img class="hidden" src="image/supp.png">
                    <ol>
                        <li>Alimentation<img class="hidden" src="image/supp.png"></li>
                        <li>Dalle<img class="hidden" src="image/supp.png"></li>
                    </ol>
                </li>
                <li>Disque dur<img class="hidden" src="image/supp.png"></li>
            </ol>
        </li>
        <li>Test<img class="hidden" src="image/supp.png"></li>
        <li>Test<img class="hidden" src="image/supp.png"></li>
        <li>Test<img class="hidden" src="image/supp.png"></li>
        <li>Ajouter une catégorie...<img class="hidden" src="image/supp.png"></li>
        <li>Software<img class="hidden" src="image/supp.png">
            <ol>
                <li>Excel<img class="hidden" src="image/supp.png"></li>
            </ol>
        </li>
    </form>
    <form action="?function=base_connaissances&amp;onglet=2" method="POST" id="" name="">
        <input type="hidden" value="NULL" name="idCategSup">
        <input type="text" value="Ajouter une catégorie..." name="lib_categ">
        <input type="submit" value="Ok">
    </form>            
</ol>

Javascript

$("#bdc_categories").on('mouseleave', '', '', function(){$("#bdc_categories li").removeClass('is-hover'); $("#bdc_categories li").children('img').css({"visibility": "hidden"});});
    $("#bdc_categories li").hover(function (event) {
        event.stopPropagation();

        if($(event.target).is('li')){
        $("#bdc_categories li").removeClass('is-hover');
        $("#bdc_categories li").children('img').css({"visibility": "hidden"});

        $(event.target).addClass('is-hover');
        $(event.target).children('img').css({"visibility": "visible"});



        var tar = $(event.target);
        while ($(tar.parent('ol').parent('li')).length) {
            tar = $(tar.parent('ol').parent('li'));
            $(tar).addClass('is-hover');
            //$(tar).children('img').css({"visibility": "hidden"});
        }
    }

    }, function (event) {
        event.stopPropagation();

        $(event.target).removeClass('is-hover');




        $("#bdc_categories li").not(".is-hover").children('img').css({"visibility": "hidden"});
        $("#bdc_categories .is-hover").children('img').css({"visibility": "visible"});
        $("#bdc_categories .is-hover").parent('ol').parent('li').children('img').css({"visibility": "hidden"});

    }

它几乎可以工作,但我确信有更好的方法来实现这一点? 还有一个小问题:如果我从“测试”li 到 Hardware li,图像不会出现......我认为这是因为 mousein 事件在 ol 元素上被触发,即使我不在一个...

任何帮助将不胜感激!

【问题讨论】:

    标签: javascript jquery html hover


    【解决方案1】:

    你不是在你的 JS 代码的最后遗漏了一个); 吗?当我修复它并在 JSFiddle 中尝试它时,它可以工作。

    this 不是您要找的吗?

    【讨论】:

    • 只是一个错误,当我粘贴我的代码但尝试从测试 li 转到硬件 li(不悬停子类别)时,图像不会显示
    • @Nehluxhes 感谢您让我知道。不过,它对我有用。我可以从测试li 转到硬件测试,然后图像就会显示出来 :)
    • 对不起,我应该补充说你也不能离开主
        ,从测试
      1. 垂直进入硬件
      2. (留在填充中)
    • 也不要重复数字!是的,这是一个非常具体的错误:D 只是从测试到硬件,垂直。用 IE11、Chrome 和 Firefox 测试,我有这个错误。
    • 哦,对了!好吧,我不明白为什么从技术角度来看它不起作用。当您向上通过&lt;ol&gt; 时,它仍应触发一个新事件。对不起@Nehluxhes,我会删除我的答案:)
    猜你喜欢
    • 2021-12-10
    • 1970-01-01
    • 2014-05-30
    • 2018-05-03
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    相关资源
    最近更新 更多