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

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

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

以下是修改后的代码:

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()方法来切换它的显示/隐藏状态。

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

相关文章
|
机器学习/深度学习 传感器 算法
matlab改进鲸鱼算法GSWOA 基准函数对比与检验
matlab改进鲸鱼算法GSWOA 基准函数对比与检验
|
前端开发 JavaScript 数据格式
图片URL转file文件(前端+后端node.js)
图片URL转file文件(前端+后端node.js)
|
应用服务中间件 nginx
Nginx 出现403 Forbidden 的几种解决方案【已解决】
Nginx 出现403 Forbidden 的几种解决方案【已解决】
10382 3
|
程序员 C语言
c enum(枚举)
c enum(枚举)
314 1
|
11月前
|
存储 大数据 数据管理
大数据分区注意事项
大数据分区注意事项
173 5
|
12月前
|
安全
ICP备案服务码是什么,有什么用
【10月更文挑战第11天】 ICP备案服务码是什么,有什么用
1776 2
|
JSON 小程序 JavaScript
微信小程序页面事件,下拉刷新事件和上拉触底事件
这篇文章介绍了微信小程序中如何实现下拉刷新和上拉触底事件,包括开启下拉刷新、配置下拉刷新样式、监听下拉刷新事件,以及监听上拉触底事件和配置上拉触底的距离。
|
数据库
分布式锁实现问题之数据库中的分布式锁有哪些缺点
分布式锁实现问题之数据库中的分布式锁有哪些缺点
|
云计算
公安部备案“网络接入服务商”和“域名商”所属地区管辖选择和填写说明
在阿里云进行公安部备案时,网络接入服务商选“阿里云计算有限公司”,区域为“浙江省杭州市余杭区”,接入方式为“租赁虚拟空间”,。域名注册若也在阿里云(原万网),服务商同样填写阿里云,区域不变
4600 4
sourcetree设置忽略文件
sourcetree设置忽略文件
592 0