为什么jQuery不添加类“ drop1”?

时间:2018-12-29 12:13:21

标签: javascript jquery dom async-await

我编写了带有子菜单的移动导航代码,并尝试使用jQuery和javascript添加类,但是这两种方法都没有将class“ drop1”或“ drop2”添加到所单击的元素中。

我已经尝试捕获该错误,但是没有人

$("ul#main-menu > li[class ^= level1-]")
    .prev("img")
    .addBack()
    .on("click", async ()=> {
        try {
            await $(this).addClass("drop1");
            cl2 = this;
            cl2.className += "drop1";
        } catch(e) {
            console.log(e);
        }
    })
    .each((i, elem)=> {
        if($(elem).hasClass("drop1")) {
            let newElem = $(elem);
            if($(elem).is("img")) {
                newElem = $(elem).closest("li");
                $(elem).removeClass("drop1");
                newElem.addClass("drop1");
            }
        } else {
            return;
        }
        newElem
            .nextUntil("li")
            .animate({
                "transform": "rotate(180deg)"
            }, 300);
        newElem
            .children("ul[class $= m1]")
            .slideDown(300)
            .children("li[href = #]")
            .on("click", async ()=> {
                try {
                    await $(this).addClass("drop2");
                    cl1 = this;
                    cl1.className += "drop2";
                } catch(e) {
                    console.log(e);
                }
            })
            .each((i, el)=> {
                if($(el).hasClass("drop2")) {
                    newEL = $(el);
                } else {
                    return;
                }
                newEL
                    .children("ul")
                    .slideDown(300);
            });
    });

1 个答案:

答案 0 :(得分:1)

this不是单击的元素。箭头函数内的this与箭头函数外的相同,在这种情况下,可能是windowaddClass是同步的,在其上使用await是禁止操作。

  /*...*/.on("click", function() {
        $(this).addClass("drop1");
 });

PS:未处理的错误将冒出来,并最终在控制台中显示。仅当您确实要处理它时,才添加try { } catch