刻刻帝的海角 2023-11-24 15:50 采纳率: 57.1%
浏览 6

点击div显示下拉框,然后下拉框中的点击事件不生效。

点击div显示下拉框,然后下拉框中的点击事件不生效。

img

img


成功时应该是这样的效果

img

    let str = "";
            for (let i = 0; i < hso.list.length; i++) {
                if (hso.list[i].pid == 0) {
                    str += `
            <div class="item-title" onclick="isTitle()">
                <img src="./img/down.png" class="down-thi" alt="" />
                ${hso.list[i].title}
            </div>
        `
                } else if (hso.list[i].pid == 1) {
                    str += `
                        <div class="item-child">${hso.list[i].title}</div>
                    `
                } else if (hso.list[i].pid == 5) {
                    str += `
                        <div class="item-child">${hso.list[i].title}</div>
                    `
                } else if (hso.list[i].pid == 9) {
                    str += `
                        <div class="item-child">${hso.list[i].title}</div>
                    `
                } else if (hso.list[i].pid == 13) {
                    str += `
                        <div class="item-child">${hso.list[i].title}</div>
                    `
                }
            }
            $(".item").html(str)
        }
    })
}
// 显示二级档级
function isTitle() {
    if (!isRotated) {
        $(".item-child").show()
        isRotated = true;
    } else {
        $(".item-child").hide()
        isRotated = false;
    }
}

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-24 19:51
    关注

    【以下回答由 GPT 生成】

    这个问题的根本原因是在动态生成的元素上绑定了点击事件,导致点击事件无法触发。解决这个问题的方法是使用事件委托,将点击事件绑定在父级元素上,然后通过事件冒泡机制,捕获到被点击的子元素。

    以下是修改后的代码:

    let str = "";
    for (let i = 0; i < hso.list.length; i++) {
        if (hso.list[i].pid === 0) {
            str += `
                <div class="item-title">
                    <img src="./img/down.png" class="down-thi" alt="" />
                    ${hso.list[i].title}
                </div>`;
        } else if (hso.list[i].pid === 1 || hso.list[i].pid === 5 || hso.list[i].pid === 9 || hso.list[i].pid === 13) {
            str += `
                <div class="item-child">${hso.list[i].title}</div>
            `;
        }
    }
    $(".item").html(str);
    
    // 显示二级档级
    $(".item").on("click", ".item-title", function() {
        let isRotated = $(this).hasClass("rotated");
    
        // 切换下拉按钮的样式
        if (!isRotated) {
            $(this).addClass("rotated");
        } else {
            $(this).removeClass("rotated");
        }
    
        // 切换二级档级显示/隐藏
        $(this).find(".item-child").toggle();
    });
    

    修改后的代码首先移除了原来在<div class="item-title">中直接绑定的onclick="isTitle()"事件。然后使用了$(".item").on("click", ".item-title", function() {})来给.item-title元素绑定点击事件。

    在点击事件中,通过$(this)来获取被点击的.item-title元素,然后使用.hasClass("rotated")方法判断该元素是否已经有了rotated类。如果没有该类,则表示下拉框是隐藏的,需要显示;如果已经有了该类,则表示下拉框是显示的,需要隐藏。

    最后,使用.addClass("rotated").removeClass("rotated")方法来切换下拉按钮的样式,使用.find(".item-child")方法来找到对应的二级档级元素,并使用.toggle()方法来切换它的显示/隐藏状态。

    通过这样的事件委托方式,即使是动态生成的元素也能够正确地绑定事件,从而解决了点击事件无法触发的问题。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 11月24日

悬赏问题

  • ¥30 关于用python写支付宝扫码付异步通知收不到的问题
  • ¥50 vue组件中无法正确接收并处理axios请求
  • ¥15 隐藏系统界面pdf的打印、下载按钮
  • ¥15 MATLAB联合adams仿真卡死如何解决(代码模型无问题)
  • ¥15 基于pso参数优化的LightGBM分类模型
  • ¥15 安装Paddleocr时报错无法解决
  • ¥15 python中transformers可以正常下载,但是没有办法使用pipeline
  • ¥50 分布式追踪trace异常问题
  • ¥15 人在外地出差,速帮一点点
  • ¥15 如何使用canvas在图片上进行如下的标注,以下代码不起作用,如何修改