Heim > Web-Frontend > js-Tutorial > Hauptteil

jquery verhindert, dass Klick-, Mouseover- und Mouseout-Bubbling-Probleme gelöst werden

黄舟
Freigeben: 2017-06-28 14:21:17
Original
1995 Leute haben es durchsucht

<ul>
                <li class="red"><a href="javascript:void(0)">项目一</a></li>
                <li class="green"><a href="javascript:void(0)">项目二</a></li>
                <li class="green"><a href="javascript:void(0)">项目三</a></li>
                <li class="green"><a href="javascript:void(0)">项目四</a></li>
            </ul>

 $(function () {
            $.each($("li"), function (i, o) {
                $(this).children("a").click(function () {
                    allhide();
                    $(this).parent("li").attr("class", "red");
                });
                if ($(this).attr("class") != "red") {
                    $(this).mouseenter(function () {
                        $(this).attr("class", "red");
                    });
                    $(this).mouseleave(function () {
                        $(this).attr("class", "green");
                    });
                }
            });
        });
        function allhide() {
            $.each($("li"), function (i, o) {
                $(this).attr("class", "green");
            });
        }
 <style type="text/css">
        li
        {
            width: 80px;
            list-style-type: none;
        }
        .red
        {
            background-color: Red;
        }
        .green
        {
            background-color: Green;
        }
    </style>
Nach dem Login kopieren
 $.each($("li"), function (i, o) {
            $(this).children("a").click(function (e) {
                $("li").attr("class", "green");//不用另起函数
                $(this).parent("li").attr("class", "red");
                e.stopPropagation();
            });
            if ($(this).attr("class") != "red") {
                $(this).mouseenter(function (e) {
                    $(this).attr("class", "red");
                    e.stopPropagation();
                });
                $(this).mouseleave(function (e) {
                    $(this).attr("class", "green");
                    e.stopPropagation();
                });
            }
        });
Nach dem Login kopieren

Es scheint nicht zu funktionieren, wenn die Maus angeklickt wird, aber der Stil wird entfernt, wenn die Maus wegbewegt wird

<script type="text/javascript">
    //这里不存在冒泡呀
    $(function () {
        $("li").each(function(){
            $(this).find("a").click(function(){
                $("li").attr("class","green");
                $(this).parent().attr("class","red");
            })
        });
    });
</script>
Nach dem Login kopieren

Oh, sprudelt es nicht? ? Wenn ich dann hier klicke und die Maus bewege, ändert sich der Stil

$(this).children("a").click(function () {
                    allhide();
                    $(this).parent("li").attr("class", "red");
                });
Nach dem Login kopieren

Es fühlt sich an, als wäre es ein Codeproblem. Kann es noch verwendet werden, nachdem Ihr $(this)-Zeiger geändert wurde?
Verwenden Sie eine Variable, um var that = $(this) aufzuzeichnen, und versuchen Sie es

 if ($(this).attr("class") != "red") {
                    $(this).mouseenter(function () {
                        $(this).attr("class", "red");
                    });
                    $(this).mouseleave(function () {
                        $(this).attr("class", "green");
                    });
                }
            });
Nach dem Login kopieren

Nun, ich habe es selbst herausgefunden, wenn die Maus auf das -Ereignis klickt ist rot. Der Stil hat sich geändert, aber ich habe den geänderten Zeiger nicht gespeichert. Das Folgende ist mein geänderter Code:

 nodeli = $("ul li:first");
            $.each($("li"), function (i, o) {
                $(this).click(function () {
                    allhide();
                    $(this).attr("class", "red");
                    nodeli = $(this);
                    //alert(nodeli.html());
                });
                $(this).mouseover(function () {
                    $(this).attr("class", "red");
                });
                $(this).mouseout(function () {
                    $(this).attr("class", "green");
                    $(nodeli).attr("class", "red");
                    // alert(nodeli.html());
                });
            });
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonjquery verhindert, dass Klick-, Mouseover- und Mouseout-Bubbling-Probleme gelöst werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage